2010-12-01 26 views
0

J'ai le codeénumérations en 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; 
} 

et quand je tente de compiler je reçois les erreurs:

\ main.cpp: 53: Erreur: 'gamestates' n'a pas été déclarée dans ce cadre
\ main.cpp: 54: erreur: attendu ',' ou ';' avant '{' jeton
\ main.cpp: En fonction 'int SDL_main (int, char **)':
\ main.cpp: 169: erreur: 'switchstate' ne peut pas être utilisé en fonction

Je n'ai jamais utilisé d'énumérations auparavant, donc je suis confus sur ce qui ne fonctionne pas.

Répondre

3

Généralement, les erreurs du "<symbol> hors portée" signifie que le compilateur n'a pas encore vu <symbol>. Déplacez donc la déclaration de gamestates vers void switchstate(...), soit par l'intermédiaire d'un #include précédent ou simplement en le déplaçant dans le fichier.

C et C++ se compilent de haut en bas, donc les symboles doivent être déclarés avant d'être utilisés.

2

Déplacez la déclaration de l'énumération afin qu'elle soit au-dessus de la fonction switchstate. Cela devrait faire l'affaire. C++ est très particulier sur l'ordre dans lequel les choses sont déclarées.

0

Déplacez la ligne enum gamestates dans le fichier, avant le commutateur.

0

Essayez de déplacer la définition des statuts au-dessus de la définition de la fonction d'état du commutateur.

0

Vous pouvez définir l'énumération avant la fonction switchstate.

0

En C++, vous devez déclarer tous vos types avant de pouvoir vous y référer. Ici, vous déclarez votre énumération après la fonction switchstate, donc quand le compilateur C++ lit switchstate, il voit que vous faites référence à un type qu'il ne connait pas encore, et fait une erreur. Si vous déplacez la déclaration enum avant switchstate, ça devrait aller.

En général, vous devez mettre les déclarations en haut de votre fichier ou dans des fichiers d'en-tête séparés que vous incluez en haut du fichier.