何が起こっているのか理解できません。 Visual Studio 2008を使用して、次のような列挙を定義しました。
enum MyType{
A,
B,
C
};
次に、メンバー変数を初期化するために使用します。
class MyClass
{
private:
bool bit_;
uint16 num_;
MyType member_;
public:
MyClass(MyType value){
member_ = value; // This the assignment which fails
} // Here, there's a breakpoint to query member_ value
};
myClassインスタンス= new MyClass();
私はデバッグ構成を使用しているので、変数を読むときに最適化をだますことはできません。割り当て直後のブレークポイントで、デブガーはメンバー_の値を示しています member_ = C
.
それはデバッガーのwhatch更新の問題かもしれませんが、メソッド内では、チェック時に真であることを評価します。
if(member_ == C){
// ??
}
また、他の値に割り当てると、奇妙な数字が得られます。 member_ = B
与えます member_ = 258
それを偽装するとき。何が悪いのか教えてもらえますか?前もって感謝します。
編集#1
割り当て後の理由を説明する面白い効果に気づきました member_ = A
表現 member_ == C
に評価します true
デフォルト値の列挙の場合:
列挙の場合
enum MyType{ A, B, C}; // equivalent to enum MyType{ A = 0, B = 1, C = 2};
私は得ます
MyType a = A; // but when fetching a the value is 2 (0x0002) thats the map for C!
MyType b = B; // but when fetching a the value is 258 (0x0102)
MyType c = C; // but when fetching a the value is 514 (0x0202)
しかし、私が作ったら
enum MyType{ A = 5, B = 6, C = 7};
私は得ます
MyType a = A; // but when fetching a the value is 1282 (0x0502)
MyType b = B; // but when fetching a the value is 1538 (0x0602)
MyType c = C; // but when fetching a the value is 1794 (0x0702)
したがって、その#?!^%の列挙を割り当てるとき、ルールは8ビットをシフトして2を追加します。コンパイラの問題のように聞こえます。
ところで、タイプを作る member_
することが int
代わりは MyType
何も変わらない。
編集#2さらに2人のメンバーをクラスに追加しました。これは問題の本当の原因です。時間制限が消えるとすぐに答えを投稿します(質問の投稿から8時間)。