Я установил 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 (v 4.8.4 64 bit) с помощью этой команды:
>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;
Посмотрев аккумуляторы.hpp я поменял аккумуляторы :: момент<2> к моменту<2>. Это сделало трюк и компиляция (с такими же флагами) удалась. В качестве альтернативы, префикс «аккумуляторы» с «Boost :: аккумуляторы :: момент»<2> «тоже сработало. Поэтому мой вопрос: что-то не так с моей установкой boost или в примере из учебника есть опечатка?
Кажется, это действительно опечатка.
Вы можете использовать весь boost
namespace (плохая идея) для компиляции примера:
using namespace boost;
accumulators::moment<2>(acc);
Или, как вы уже сделали, просто удалите accumulators::
конкретнее и использовать только namespace boost::accumulators;
,
Или просто укажите его полное имя: boost::accumulators::moment<2>(acc)
,
Других решений пока нет …