我有代码
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'不能用作函数
我之前从未使用过枚举,所以我对什么不起作用感到困惑。
答案 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之前移动枚举声明,你应该没问题。
通常,您应该将声明放在文件的顶部,或者放在文件顶部的单独的头文件中。