使用boost dynamic_bitset编译错误

时间:2011-10-12 10:00:25

标签: c++ boost bitset

我正在尝试使用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。

2 个答案:

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