2011-10-12 102 views
1

我想使用boost ::来,dynamic_bitset,如下图所示:与升压来,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 

加速文档给出了一个example这里,编译绝对好。有人可以在这里指出问题吗?

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

回答

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仍然缺乏这个功能。

+0

感谢这样一个快速回复。你钉了它。 – Lazylabs

1
boost::dynamic_bitset<> _bitset(8); 
          //^^^ cause of the problem! 

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

所以,在预C++ 11,做initiatialization在构造函数成员初始化列表如下:

Bitmap(std::size_t size = _size): _bitset(8) 
{        //^^^^^^^^^^called member-initialization-list 
    //... 
} 
private: 
boost::dynamic_bitset<> _bitset; //no initialization here