пример бустинг-аккумуляторов не компилируется

Я установил boost (1.60.0) на Linux Mint 17.3 Rosa и попытался скомпилировать пример аккумулятора boost (http://www.boost.org/doc/libs/1_60_0/doc/html/accumulators/user_s_guide.html) с помощью компилятора gcc (версия 4.8.4, 64-разрядная версия). ) с помощью этой команды:

>g++ -o exaccu exaccumulator.cpp -I/usr/local/lib/boost_1_60_0/

Компиляция не удалась с длинным списком сообщений об ошибках, начинающихся с:

>exaccumulator.cpp: In function ‘int main()’:
>exaccumulator.cpp:22:32: error: ‘accumulators’ has not been declared
>std::cout << "Moment: " << accumulators::moment<2>(acc) << std::endl;

После просмотра accumulators.hpp я изменил accumulators::moment‹2> на moment‹2>. Это сработало, и компиляция (с теми же флагами) прошла успешно. В качестве альтернативы, префикс «аккумуляторы» с «boost::accumulators::moment‹2>» тоже работал. Итак, мой вопрос: что-то не так с моей установкой boost или в примере из учебника есть опечатка?


person Plamenk    schedule 09.06.2016    source источник
comment
Я отправил PR, чтобы исправить пример: github.com/boostorg/accumulators/pull/4   -  person Praetorian    schedule 09.06.2016


Ответы (1)


Похоже, это действительно опечатка.

Вы можете использовать все пространство имен boost (плохая идея), чтобы скомпилировать пример:

using namespace boost;
accumulators::moment<2>(acc);

Или, как вы уже сделали, просто удалите спецификатор accumulators:: и используйте только namespace boost::accumulators;.

Или просто укажите его полное имя: boost::accumulators::moment<2>(acc).

person Hatted Rooster    schedule 09.06.2016