-2
在您標記爲重複之前,我已閱讀帖子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
,我沒有在別處使用它。我已經嘗試將這些語句轉換爲其他文章中建議的顯式塊,並且它編譯但似乎沒有正確捕獲。
'我上面鏈接的帖子聲明,只有當您在另一個case語句中使用初始化變量而不是定義的位置時,纔會出現此錯誤。「否,不會。 – cpplearner
確實沒有那麼說。對於另一個問題,這已經得到了很好的回答。 – hvd
至於「我已經嘗試將這些語句轉換爲其他文章中建議的顯式塊,並且它編譯但似乎沒有正確捕獲。」 - 我無法弄清楚你的意思。沒有異常處理,所以你沒有使用「catch」的標準含義。如果你的意思是它沒有跳轉到正確的案例標籤,那麼這是錯誤的,它會。如果你的意思是別的,那麼請更清楚你的意思。 – hvd