1

我正在尝试使用 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 文档在这里给出了一个例子,它编译得非常好。有人可以在这里指出问题吗?

我的编译器是 g++ 版本 4.4.5。

4

2 回答 2

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 仍然缺少该功能。

于 2011-10-12T10:04:31.093 回答
1
boost::dynamic_bitset<> _bitset(8);
                             //^^^ cause of the problem!

在 C++03 和 C++98 中都不允许进行类内初始化。但是,它在 C++11 中是允许的。

因此,在 C++11 之前的版本中,将构造函数成员初始化列表中的初始化为:

 Bitmap(std::size_t size = _size): _bitset(8) 
 {                              //^^^^^^^^^^called member-initialization-list
    //...
 }
private:
 boost::dynamic_bitset<> _bitset; //no initialization here
于 2011-10-12T10:05:44.267 回答