簡體   English   中英

C ++中的枚舉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM