3

我无法弄清楚我是否在这里做错了什么,希望这里有人可以启发我。

我有一个类Flags,这是一个非常简化的版本,但我声明了一个 bitset

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 回答