Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Tablica i error C2057: expected constant expression

Ostatnio zmodyfikowano 2013-07-13 17:40
Autor Wiadomość
Bajt
Temat założony przez niniejszego użytkownika
Tablica i error C2057: expected constant expression
» 2013-07-13 17:09:18
Witam
Pisząc moją aplikację, natknąłem się na problem. Otóż napisałem taki kod:
C/C++
int number_players = 0;

int ReturnNumberPlayers()
{
    system( "CLS" );
    HANDLE handle;
    handle = GetStdHandle( STD_OUTPUT_HANDLE );
    SetConsoleTextAttribute( handle, 2 );
   
    SetConsoleTextAttribute( handle, 7 );
    std::cout << "\t\t\t";
    for( int i = 0; i < 32; ++i )
    {
        SetConsoleTextAttribute( handle, 1 );
        std::cout << "-";
    }
    SetConsoleTextAttribute( handle, 7 );
    std::cout << "\n\t\t\tEnter number of players [max.5]: ";
    std::cin >> number_players;
    Sleep( 1000 );
    return number_players;
}
void GetNamesPlayers( int number_players )
{
    system( "CLS" );
    HANDLE handle;
    handle = GetStdHandle( STD_OUTPUT_HANDLE );
   
    std::string names_players[ number_players ];
   
    for( int i = 1; i < number_players + 1; ++i )
    {
        SetConsoleTextAttribute( handle, 7 );
        std::cout << "\t\t\t";
        for( int y = 0; y < 32; ++y )
        {
            SetConsoleTextAttribute( handle, 1 );
            std::cout << "-";
        }
        SetConsoleTextAttribute( handle, 7 );
        std::cout << "\n\t\t\tEnter name player " << i << " ";
        std::cin >> names_players[ i ];
        Sleep( 1000 );
        _getch();
    }
}
I wywala mi błędy:

1>------ Build started: Project: Paper Stone Scrissors Game, Configuration: Debug Win32 ------
1>  game.cpp
1>c:\users\user\documents\programs c++\paper stone scrissors game\paper stone scrissors game\paper stone scrissors game\game.cpp(1298): error C2057: expected constant expression
1>c:\users\user\documents\programs c++\paper stone scrissors game\paper stone scrissors game\paper stone scrissors game\game.cpp(1298): error C2466: cannot allocate an array of constant size 0
1>c:\users\user\documents\programs c++\paper stone scrissors game\paper stone scrissors game\paper stone scrissors game\game.cpp(1298): error C2133: 'names_players' : unknown size
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Oczywiście, treść błędów jest mi znana, jednak jak je rozwiązać?
P-87761
Savail
» 2013-07-13 17:15:34
Liczba elementów przy tworzeniu tablicy musi być stała, a więc zmień parametr funkcji z
GetNamesPlayers( int number_players )
 na
GetNamesPlayers( const int number_players )
P-87762
Monika90
» 2013-07-13 17:20:35
@Savail
nie tylko musi być stała, ale jeszcze znana w czasie kompilacji (no chyba, że masz C++14)

Najelpiej będzie użyć std::vector<std::string>
P-87763
Bajt
Temat założony przez niniejszego użytkownika
» 2013-07-13 17:21:42
Spróbowałem, jednak nie pomogło. Próbowałem zrobić coś takiego:
C/C++
const int test = number_players;
std::string names_players[ test ];
Ale dalej ten sam błąd...

@Monika
Czyli jakby taki kod wyglądał?
P-87764
Savail
» 2013-07-13 17:27:46
Tak jak napisała Monika a mi się zapomniało :o. Jeśli nie znasz z góry ilości elementów tablicy to lepiej już użyj dynamicznej tablicy bądź gotowych klas takich jak vector.
P-87766
Monika90
» 2013-07-13 17:28:56
C/C++
#include <vector>

//...

std::vector < std::string > names_players( number_players );
I pamiętaj, że tablice i vector indeksuje się od 0 do n - 1, w kodzie który zamieściłeś masz od 1 do n, gdzie n to ilość elementów.
P-87767
Bajt
Temat założony przez niniejszego użytkownika
» 2013-07-13 17:40:54
Wielkie dzięki za pomoc!
P-87768
« 1 »
  Strona 1 z 1