2010-12-01 3 views
0

ich den CodeAufzählungen in C++

void switchstate(gamestates state) --line 53 
{ --line 54 
    switch(state) 
    case state_title: 
     title(); 
     break; 
    case state_about: 
     break; 
    case state_game: 
     break; 
    case state_battle: 
     break; 
} 

enum gamestates 
{ 
state_title, state_about, state_game, state_battle, 
}; 


int main(int argc, char* args[]) 
{ 
gamestates currentstate = state_title; 
startup(); 
load_resources(); 
switchstate(currentstate); --line 169 
return 0; 
} 

haben und wenn ich versuche ich die Fehler zu kompilieren:

\ main.cpp: 53: Fehler: 'gamestates' wurde nicht in diesem Umfang erklärt
\ main.cpp: 54: Fehler: erwartet ',' oder ';' vor '{' token
\ main.cpp: In Funktion 'int SDL_main (int, char **)':
\ main.cpp: 169: Fehler: 'Switch' als Funktion kann nicht

verwendet werden, Ich habe noch nie Aufzählungen verwendet, daher bin ich verwirrt, was nicht funktioniert.

Antwort

3

Im Allgemeinen bedeutet Fehler der "<symbol> nicht im Geltungsbereich", dass der Compiler <symbol> noch nicht gesehen hat. So verschieben Sie die Deklaration von gamestates zu vor void switchstate(...), entweder über eine frühere #include oder verschieben Sie es einfach in der Datei.

C und C++ kompilieren von oben nach unten, daher müssen Symbole deklariert werden, bevor sie verwendet werden.

2

Verschieben Sie die Deklaration der Enumeration so, dass sie über der switchstate-Funktion liegt. Das sollte den Trick machen. C++ ist sehr speziell bezüglich der Reihenfolge, in der Dinge deklariert werden.

0

Verschieben Sie die Zeile enum gamestates in der Datei vor dem switchstate.

0

Versuchen Sie, die Definition von Gamestates über die Definition der switchstate-Funktion zu verschieben.

0

Sie können die Enumeration vor der Switchstate-Funktion definieren.

0

In C++ müssen Sie alle Typen deklarieren, bevor Sie auf sie verweisen können. Hier deklarieren Sie Ihre Enumeration nach der switchstate-Funktion. Wenn der C++ - Compiler also switchstate liest, sieht er, dass Sie auf einen Typ verweisen, den er noch nicht kennt, und gibt einen Fehler aus. Wenn Sie die Enum-Deklaration vor dem switchstate verschieben, sollte alles in Ordnung sein.

Im Allgemeinen sollten Sie Deklarationen an der Spitze Ihrer Datei oder in separaten Header-Dateien, die Sie am Anfang der Datei enthalten.