2016-07-31 20 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()はとなり、標準の32ビットランダムジェネレータを使用した方がずっと簡単になります。

関連する問題