2011-10-12 125 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