ошибка компиляции с boost_bitset - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь использовать 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

Повышение документациидает пример здесь, который компилируется абсолютно нормально.Может кто-нибудь указать на проблему здесь?

Мой компилятор - g ++ версия 4.4.5.

Ответы [ 2 ]

1 голос
/ 12 октября 2011
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
1 голос
/ 12 октября 2011

Разница в том, что вы пытаетесь инициализировать переменную-член, а не "отдельно стоящую".

Либо запустите с -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 все еще не хватало этой функции.

...