C ++中的枚举

时间:2010-12-01 23:12:27

标签: c++ enums compiler-errors enumeration

我有代码

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'不能用作函数

我之前从未使用过枚举,所以我对什么不起作用感到困惑。

6 个答案:

答案 0 :(得分:3)

通常,“<symbol>不在范围内”的错误意味着编译器尚未看到<symbol>。因此,请将gamestates的声明移至void switchstate(...)之前,或者通过之前的#include,或者只是将其移到文件中。

C和C ++从上到下编译,因此必须在使用符号之前声明符号。

答案 1 :(得分:2)

移动枚举的声明,使其高于switchstate函数。这应该够了吧。 C ++对于声明事物的顺序非常讲究。

答案 2 :(得分:0)

在switchstate之前将enum gamestates行放在文件中。

答案 3 :(得分:0)

尝试在switchstate函数定义之上移动游戏状态的定义。

答案 4 :(得分:0)

您可能希望在switchstate函数之前定义枚举。

答案 5 :(得分:0)

在C ++中,您必须先声明所有类型,然后才能引用它们。在这里,你在switchstate函数之后声明你的枚举,所以当C ++编译器读取switchstate时,它会看到你引用它还不知道的类型,并且出错。如果你在switchstate之前移动枚举声明,你应该没问题。

通常,您应该将声明放在文件的顶部,或者放在文件顶部的单独的头文件中。