在您标记为重复之前,我已阅读帖子here,但无法弄清楚这与我的代码有什么关系。
我收到了一些编译错误:
controller.cc: In member function ‘void Controller::start()’:
controller.cc:50:9: error: jump to case label [-fpermissive]
controller.cc:44:17: error: crosses initialization of ‘uint32_t c’
这是我的代码:
void Controller::start(){
int curPosX = view->getWidth() / 2;
int curPosY = view->getHeight() / 2;
uint32_t color = 0xFFFFFF;
DeviceHandler player = DeviceHandler("/dev/input/js0", false);
player.flush();
while(1){
button_event_t press;
bool ret = player.poll(&press);
if(ret && press.type == PRESS){
switch(press.name){
case DPAD_UP:
curPosY += 1;
break;
case DPAD_DOWN:
curPosY -= 1;
break;
case DPAD_RIGHT:
curPosX += 1;
break;
case DPAD_LEFT:
curPosX -= 1;
break;
case BUTTON_LB:
view->clear();
break;
case BUTTON_RB:
uint32_t c = rand() & 0xff;
c |= (rand() & 0xff) << 8;
c |= (rand() & 0xff) << 16;
c |= (rand() & 0xff) << 24;
color = c;
break;
case BUTTON_A:
color = 0x000000;
break;
}
}
//color = 0x000000;
view->drawPixel(curPosY,curPosX, color);
usleep(500);
}
}
现在问题在于case BUTTON_RB:
和case BUTTON_A:
语句。当我删除case BUTTON_A:
时,它编译得很好。我上面链接的帖子声明只有在另一个case语句中使用初始化变量而不是定义它时才会出现此错误。这不是这种情况。
我定义的唯一变量是uint32_t c
,我不在其他地方使用。我已经尝试将这些语句转换为其他帖子中建议的显式块,并且它编译但似乎没有正确捕获。
答案 0 :(得分:1)
您只在case BUTTON_RB
中使用它并不会改变它具有本地范围的事实。把它放在自己的范围内,或者更好的是它自己的功能。
此外,rand()
确实已弃用,如果您只使用其中一个标准32位随机生成器,您将会更容易离开。