2011-08-04 6 views
3

ここで何か間違っているのか分かりませんが、ここの誰かが私を啓発することができます。ビットセットをVS2010を使用して

私はクラスFlagsを持っている、これは非常に単純化されたバージョンですが、私は私が

Flags::Flags() 
    : _P(32ul) 
{} 

としてそれを初期化する。しかし、それはコンパイルしていますしません、私のコンストラクタで

class Flags 
{ 
private: 
    //List of 8 bits 
    std::bitset<8> _P; 
public: 
    Flags(); 
} 

ビットセットを宣言します私のエラー

エラーC2668: 'std :: bitset < _Bits> :: bitset':ambigこれは、VS2010 SP1 64ビットではなく32ビットプログラムとしてコンパイルされ

にuousコールオーバーロードされた関数

EDIT

受け入れ答えは、誰もが説明できる上記のためではなく、サイドノートとして、なぜときデフォルトのコンストラクタを使用して(すべて0に初期化する必要があります)、それらはすべてゼロに設定されていませんか?

_p.to_ulong() 

戻り1390560944 と_pが

[8](0,0,0,0,1,1,0,1) 
+0

エラー全体をペーストし、アンダースコアの後に大文字を付けた識別子は実装用に予約されています。メンバーの名前を変更します。 –

+0

これはエラー全体です... – tom502

+0

その下には、さまざまなあいまいなケースをリストするセクションはありませんか? – Bart

答えて

5

のように見えるそれはVCのバグだhttp://connect.microsoft.com/VisualStudio/feedback/details/532897/problems-constructing-a-bitset-from-an-unsigned-long-in-the-vc-rc

に従ってまた_で始まる識別子と大文字を実装するために予約されていることに注意してあなたのプログラムで使用することは違法です。

EDIT:回避策のページ(正しく読んでください)によると、unsigned longの代わりにunsigned long longに値をキャストしてください。

+0

ありがとうございます@マークBは、あなたがそのことを考えても編集を見てください – tom502

関連する問題