C++ 错误:跳转到案例标签&;交叉初始化

C++ 错误:跳转到案例标签&;交叉初始化,c++,switch-statement,C++,Switch Statement,在你标记为复制之前,我已经阅读了这篇文章,不知道这与我的代码有什么关系 我遇到一些编译错误: 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’ 这是我的密码: vo

在你标记为复制之前,我已经阅读了这篇文章,不知道这与我的代码有什么关系

我遇到一些编译错误:

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);
    }
}
void控制器::start(){
int curPosX=view->getWidth()/2;
int curPosY=view->getHeight()/2;
uint32_t color=0xFFFFFF;
DeviceHandler player=DeviceHandler(“/dev/input/js0”,false);
player.flush();
而(1){
按钮\u事件\u t按下;
bool ret=player.poll和press;
if(ret&&press.type==press){
开关(按名称){
案例DPAD_UP:
curPosY+=1;
打破
案例DPAD_向下:
curPosY-=1;
打破
案例DPAD_右:
curPosX+=1;
打破
案例DPAD_左:
curPosX-=1;
打破
箱子按钮_LB:
查看->清除();
打破
案例按钮\u RB:
uint32\u t c=rand()&0xff;

c |=(rand()&0xff)您只在
大小写按钮中使用它这一事实不会改变它具有本地作用域的事实。将它放在它自己的作用域中,或者更好地说,放在它自己的函数中


还有,
rand()
确实被弃用了,如果你只使用一个std 32位随机发生器,你会容易得多。

我上面链接的帖子说,只有在定义变量的地方以外的另一个case语句中使用初始化变量时,才会发生此错误。
不,它没有。实际上它没有说这一点在另一个问题上已经得到了很好的回答。至于“我已经尝试过将这些语句转换成其他帖子中建议的显式块,它可以编译,但似乎没有正确地理解。”--我很难理解您的意思。没有异常处理,因此您没有使用“catch”的标准含义。如果你的意思是它没有跳转到正确的大小写标签,那么这是错误的,它会。如果你的意思是其他的,那么请更清楚你的意思。我投票支持这个问题。C语法不直观,没有{}的情况下,大小写标签不能有声明.虽然这是一个重复的问题,但很容易看出另一个问题的答案漏掉了足够的信息,让读者蒙在鼓里。