[英]Enumerations 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;
}
當我嘗試編譯時出現錯誤:
\\ main.cpp:53:錯誤:未在此范圍內聲明“ gamestates”
\\ main.cpp:54:錯誤:預期為','或';' 在“ {”令牌之前
\\ main.cpp:在函數'int SDL_main(int,char **)'中:
\\ main.cpp:169:錯誤:“ switchstate”不能用作功能
我以前從未使用過枚舉,所以我對什么不起作用感到困惑。
通常,“ <symbol>
不在范圍內”的錯誤表示編譯器尚未看到<symbol>
。 所以申報移動gamestates
之前void switchstate(...)
要么通過一個較早#include
或者只是該文件以移動它。
C和C ++從上到下進行編譯,因此必須在使用符號之前聲明它們。
移動枚舉的聲明,使其位於switchstate
函數之上。 這應該夠了吧。 C ++對於聲明的順序非常嚴格。
在enum gamestates
之前,將enum gamestates
在文件中向上對齊。
嘗試將游戲狀態的定義移到switchstate函數定義之上。
您可能想在switchstate函數之前定義枚舉。
在C ++中,必須先聲明所有類型,然后才能引用它們。 在這里,您在switchstate函數之后聲明您的枚舉,因此,當C ++編譯器讀取switchstate時,它會看到您引用的是未知類型,並產生錯誤。 如果將enum聲明移到switchstate之前,應該沒問題。
通常,應將聲明放在文件的頂部,或放在文件頂部的單獨的頭文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.