inf*_*oop 11 c++ switch-statement
这是我的代码:
bool Character::keyPress(char c)
{
switch(c)
{
case up_key:
move(0, -1);
break;
case down_key:
move(0, 1);
break;
case left_key:
move(-1, 0);
break;
case right_key:
move(1,0);
break;
default:
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
并且编译器抱怨:
error C2051: case expression not constant
error C2051: case expression not constant
error C2051: case expression not constant
error C2051: case expression not constant
Run Code Online (Sandbox Code Playgroud)
在我的头文件中,我有:
protected:
char up_key;
char down_key;
char right_key;
char left_key;
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual C++ 2008.
Jan*_*nne 15
正如错误消息所述,case表达式必须是常量.编译器在编译时将其构建为一个非常快速的查找表,如果程序运行时值可能会发生变化,则无法执行此操作.
如果你确实需要它们是变量而不是常量,那么最好的办法就是使用if/else语句.
小智 7
替换这个长笨拙的代码,
switch(c)
{
case up_key:
move(0, -1);
break;
case down_key:
move(0, 1);
break;
case left_key:
move(-1, 0);
break;
case right_key:
move(1,0);
break;
default:
return false;
}
Run Code Online (Sandbox Code Playgroud)
用这样的东西:
move( (c==right_key) - (c==left_key) , (c==down_key) - (c==up_key) );
Run Code Online (Sandbox Code Playgroud)
您可以使用更整齐的单行代码轻松地替换17行代码.