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
boost::dynamic_bitset<> _bitset(8);
                             //^^^ cause of the problem!

クラス内初期化は、C++03 と C++98 の両方で許可されていません。ただし、C++11 では許可されています。

そのため、C++11 より前では、コンストラクター member-initialization-list で次のように初期化を行います。

 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 に答える
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 に答える