错误:跳转到案例标签并跨越[重复]的初始化
Posted
技术标签:
【中文标题】错误:跳转到案例标签并跨越[重复]的初始化【英文标题】:error: jump to case label & crosses initialization of [duplicate] 【发布时间】:2016-07-31 17:40:23 【问题描述】:在您标记为重复之前,我已阅读帖子 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
,我不会在其他地方使用它。我已尝试按照其他帖子中的建议将这些语句转换为显式块,它可以编译但似乎无法正确捕获。
【问题讨论】:
The post I linked above has stated that this error only occurs when you use an initialized variable in another case statement other than where it was defined.
不,它没有。
确实没有这么说。这在其他问题上已经得到了很好的回答。
至于“我已尝试按照其他帖子中的建议将这些语句转换为显式块,它可以编译但似乎无法正确捕获。” ——我很难理解你的意思。没有异常处理,所以你没有使用“catch”的标准含义。如果您的意思是它没有跳转到正确的大小写标签,那就错了,它会。如果你的意思是别的,那么请更清楚你的意思。
我对这个问题投了赞成票。 C 语法不直观,case 标签不能在没有 的情况下声明。虽然这是一个重复的问题,但很容易看出另一个问题的答案是如何遗漏了足够的信息,让读者一头雾水。
【参考方案1】:
您仅在case BUTTON_RB
中使用它这一事实并没有改变它具有本地范围的事实。把它放在它自己的范围内,或者更好的是,它自己的功能。
另外,rand()
真的已被弃用,如果您只使用其中一个 std 32 位随机生成器,您会更容易摆脱。
【讨论】:
以上是关于错误:跳转到案例标签并跨越[重复]的初始化的主要内容,如果未能解决你的问题,请参考以下文章
导致此问题的原因:无法从 switch 语句跳转到此案例标签 [重复]