2016-07-31 35 views
-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,我沒有在別處使用它。我已經嘗試將這些語句轉換爲其他文章中建議的顯式塊,並且它編譯但似乎沒有正確捕獲。

+1

'我上面鏈接的帖子聲明,只有當您在另一個case語句中使用初始化變量而不是定義的位置時,纔會出現此錯誤。「否,不會。 – cpplearner

+0

確實沒有那麼說。對於另一個問題,這已經得到了很好的回答。 – hvd

+0

至於「我已經嘗試將這些語句轉換爲其他文章中建議的顯式塊,並且它編譯但似乎沒有正確捕獲。」 - 我無法弄清楚你的意思。沒有異常處理,所以你沒有使用「catch」的標準含義。如果你的意思是它沒有跳轉到正確的案例標籤,那麼這是錯誤的,它會。如果你的意思是別的,那麼請更清楚你的意思。 – hvd

回答

1

您只在case BUTTON_RB內使用它的事實不會改變它具有本地範圍的事實。把它放在它自己的範圍內,或者更好的是,它自己的功能。

另外,rand()確實已棄用,如果您只是使用std 32位隨機生成器之一,您將輕鬆得多。