3

ここで何か間違ったことをしているのかどうかわかりません。うまくいけば、ここの誰かが私を啓発してくれます。

クラスがFlagsあります。これは非常に単純化されたバージョンですが、ビットセットを宣言します

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

私のコンストラクタでは、次のように初期化します

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

しかし、それはコンパイルされず、エラーが発生します

エラー C2668: 'std::bitset<_Bits>::bitset': オーバーロードされた関数のあいまいな呼び出し

これは VS2010 SP1 64 ビットでコンパイルされていますが、32 ビット プログラムとしてコンパイルされています。

編集

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

_p.to_ulong()

1390560944 を返し、_p は次のようになります

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

1 に答える 1

5

http://connect.microsoft.com/VisualStudio/feedback/details/532897/problems-constructing-a-bitset-from-an-unsigned-long-in-the-vc-rcによると、これはVCのバグです。

_また、大文字で始まる識別子は実装用に予約されており、プログラムでの使用は違法であることに注意してください。

編集:回避策のページ(私が正しく読んだ場合)によると、回避策は、のunsigned long long代わりに値をキャストすることですunsigned long

于 2011-08-04T19:25:19.407 に答える