错误:跳转到案例标签&跨越初始化

时间:2016-07-31 17:40:23

标签: c++ switch-statement

在您标记为重复之前,我已阅读帖子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,我不在其他地方使用。我已经尝试将这些语句转换为其他帖子中建议的显式块,并且它编译但似乎没有正确捕获。

1 个答案:

答案 0 :(得分:1)

您只在case BUTTON_RB中使用它并不会改变它具有本地范围的事实。把它放在自己的范围内,或者更好的是它自己的功能。

此外,rand() 确实已弃用,如果您只使用其中一个标准32位随机生成器,您将会更容易离开。