我正在尝试使用boost :: dynamic_bitset,如下所示:
#include <boost/dynamic_bitset.hpp>
class Bitmap
{
public:
Bitmap(std::size_t size = _size);
void setBit(int pos);
void clearBit(int pos);
bool get(int pos);
void resize(int size);
private:
boost::dynamic_bitset<> _bitset(8);
static const std::size_t _size;
};
我在声明dynamic_bitset时遇到以下错误:
test1.cpp:14: error: expected identifier before numeric constant
test1.cpp:14: error: expected ‘,’ or ‘...’ before numeric constant
Boost文档在这里给出example,编译绝对正常。有人可以在这里指出问题吗?
我的编译器是g ++版本4.4.5。
答案 0 :(得分:1)
不同之处在于您尝试初始化成员变量,而不是“独立”变量。
使用-std = c ++ 0x运行(请参阅帖子末尾的评论)或执行:
// in class definition:
boost::dynamic_bitset<> _bitset;
// in constructor:
Bitmap(/* params */) : _bitset(8) { /* rest of code */ }
在C ++ 11中引入了以您尝试的方式初始化成员。如果我没记错的话,g ++ 4.4.5仍然没有这个功能。
答案 1 :(得分:1)
boost::dynamic_bitset<> _bitset(8);
//^^^ cause of the problem!
C ++ 03和C ++ 98中都不允许进行类内初始化。但是,它在C ++ 11中是允许的。
因此,在C ++ 11之前的版本中,将构造函数member-initialization-list中的initiatialization作为:
Bitmap(std::size_t size = _size): _bitset(8)
{ //^^^^^^^^^^called member-initialization-list
//...
}
private:
boost::dynamic_bitset<> _bitset; //no initialization here