0

私は次のことをしようとしています:

    switch(moveDirection){
        case MOVE_DIRECTION_UP:
            //do something
        break;
    }

MOVE_DIRECTION_UPは次のとおりです。

    const unsigned char MOVE_DIRECTION_UP = 0x0;

コンパイラーはエラーを出します:MOVE_DIRECTION_UPは定数式に表示できません

MOVE_DIRECTION_UPを0x0に置き換えると正常にコンパイルされるため、これは許可する必要があります。

どんな助けでもありがたいです、ありがとう!

4

4 に答える 4

2

C ++ 11を使用している場合は、MOVE_DIRECTION_UPとして宣言できますconstexpr。コンパイラは、これをスイッチラベルとして使用できる定数値と見なします。

そうでない場合は、列挙型を定義できます。

namespace eDirection { enum e {
    UP = 0x0,
    DOWN = 0x1
};}

switch( direction ) {
    case eDirection::UP: ...
};
于 2012-12-01T12:18:00.613 に答える
1

これはC++で許可されています。あなたのコードは正しいです。変数はconst定数式で使用できます。

CではなくC++ソースファイルを作成していますか?Cでは、コードは無効です(定数式でconst変数を使用することはできません)。

于 2012-12-01T12:22:24.207 に答える
0

これはコンパイラエラーのようです。

C ++ 98の場合:

5.19定数式

..。

積分定数式には、リテラル(2.13)、列挙子、定数変数、または定数式(8.5)で初期化された積分型または列挙型の静的データメンバーのみを含めることができます。

C ++ 11の場合:

5.19定数式

..。

2条件式は、評価される可能性のある部分式として次のいずれかが含まれる場合を除き、コア定数式です。

..。

—左辺値から右辺値への変換(4.1)

定数式で初期化された、先行する初期化を伴う不揮発性constオブジェクトを参照する、整数型または列挙型のglvalue、または

于 2012-12-01T12:28:26.187 に答える
0

問題が実証された実際のプログラムを提供しなかったので、水晶玉を使用します。constを前方宣言しましたが、その値はスイッチで直接表示されません。

于 2012-12-01T15:43:20.723 に答える