5

Cocoaは、typedefされた匿名の列挙型ビットフィールドを利用します。

善かれ悪しかれ、objective-C++を使用しています。.mmファイル内で、これらの列挙型ビットフィールドタイプのいずれかのタイプのプロパティに2ビット(ビット単位のORを含む)を割り当てる必要があります。libc ++コンパイラは、typedefされた匿名列挙型ビットフィールドのプロパティにint型の右辺値を与えないため、これを備えていません。

CとC++の間で列挙型のサイズに違いがあることを理解しています。では、この状況の回避策は何ですか?

割り当てを実行する私の行は、次のようなものです。

    uiSwipeRightDownRecogniser.direction = Right | Down;

ビットフィールドの定義は次のようになります。

    typedef enum 
    {
        Right = 1 << 0,
        Left  = 1 << 1,
        Up    = 1 << 2,
        Down  = 1 << 3
    } UISwipeDirection;

エラーは次のとおりです。

タイプ'UISwipeDirection'のパラメーターをタイプ'int'の右辺値で初期化できません

この種の割り当ては.mファイルでは機能しますが、.mmでは機能しません。

コンパイラはAppleのLLVM3.0(libc ++を使用)です。

4

1 に答える 1

1

を使用して変換するだけstatic_castです:

uiSwipeRightDownRecogniser.direction = static_cast<UISwipeDirection>(Right | Down);
于 2011-11-23T11:27:59.390 に答える