使用VS2010的C中的位集

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

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

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

在我的构造函数上,我将其初始化为

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

但它不会编译并给我错误

error C2668: ‘std::bitset<_Bits>::bitset’ : ambiguous call to
overloaded function

这是在VS2010 SP1 64位编译但作为32位程序

编辑

接受的答案是针对上述情况,但作为旁注,任何人都可以解释为什么当使用默认构造函数(它应该将它们全部初始化为零)时,它们并不都设置为零?

_p.to_ulong()

返回1390560944
和_p看起来像

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

解决方法:

根据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.

上一篇:ACM模板——bitset小结


下一篇:如何按位操作内存块(C)