Я пытаюсь создать и запустить примеры учебников для Boost.log
и получить ошибку компилятора, которая меня озадачила и может использовать некоторую помощь. Основные сведения; Я сделал сборку boost на OS X с включенным boost.log
, но когда я пытаюсь скомпилировать любой из примеров учебника, я получаю перегруженную ошибку 'operator>>'
из внутреннего файла буфера 'trivial.hpp'
.Невозможно скомпилировать файл Boost.log на OS X
ошибки, как сообщается, в
log/utility/explicit_operator_bool.hpp
вот стек:
/usr/local/include/boost/log/utility/explicit_operator_bool.hpp:67:29: error: overloaded 'operator>>' must have at least one parameter of class or enumeration type [2]
In file included from /usr/local/include/boost/log/attributes/attribute_name.hpp:27:
In file included from /usr/local/include/boost/log/attributes/attribute_set.hpp:28:
In file included from /usr/local/include/boost/log/sources/basic_logger.hpp:37:
In file included from /usr/local/include/boost/log/sources/severity_logger.hpp:27:
In file included from /usr/local/include/boost/log/trivial.hpp:25:
In file included from /Volumes/Macintosh HD 2/code/Logging Tut 1/loggingTut1/loggingTut1/main.cpp:18:
Overloaded 'operator>>' must have at least one parameter of class or enumeration type in /usr/local/include/boost/log/utility/explicit_operator_bool.hpp
Если бы хороший взгляд вокруг, чтобы увидеть, если кто-то что-то подобное, и я ничего не нашел - так может кто-нибудь объяснить, что я пропустил или что может быть проблема?
Детали:
Я пытаюсь это на OS X (10.6.8) с помощью Xcode 4.0.2
Я скачал и построил 1_46_1 наддува версии и работает отлично с моим первичный проект на основе повышения (с использованием Boost Asio, повышения потоков и т. д.).
Boost.log
не в основной сборке еще так что я скачал его с сайта SourceForge, как в этом вопросе: boost-log-how-to-get-it-and-how-to-build-it
Я скопировал boost/log
каталог из загруженного филиала в boost_1_46_1/boost/log
каталога, и скопировать в каталог libs/log
в boost_1_46_1/libs/log
я удалил все вещи из наддува /usr/local/include/boost
и от /usr/local/lib
, а затем повторно построен с использованием:
./bootstrap.sh --with-libraries=all --prefix=/usr/local --includedir=/usr/local/include --libdir=/usr/local/lib
следуют
sudo ./bjam install > build.log
Я проверил выход на наличие ошибок и не выглядит чистой - ничего сообщается. У меня есть все библиотеки и заголовки boost под /usr/local
. Я проверил свой проект Asio, и все это отлично работает с этой сборкой (без буфера). Я создал новый проект для учебников журналов, установил путь к библиотеке и путь включения и добавил lboost_log в параметры компоновщика.
Проблема возникает при попытке использовать программы учебник для журнала Boost - либо, как описано в подталкивания Log Docs here или в примере включены в файлы из SVN here
Пример из SVN выглядит следующим образом:
/*
* Copyright Andrey Semashev 2007 - 2011.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
/*!
* \file main.cpp
* \author Andrey Semashev
* \date 07.11.2009
*
* \brief An example of trivial logging.
*/
// #define BOOST_ALL_DYN_LINK 1
// #define BOOST_LOG_DYN_LINK 1
#include <boost/log/trivial.hpp>
#include <boost/log/core.hpp>
#include <boost/log/filters.hpp>
int main(int argc, char* argv[])
{
// Trivial logging: all log records are written into a file
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
// Filtering may also be applied
using namespace boost::log;
core::get()->set_filter
(
filters::attr<trivial::severity_level>("Severity") >= trivial::info
);
// Now the first two lines will not pass the filter
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
return 0;
}
Когда я строю код, я получаю две ошибки:
Семантический Выпуск перегруженные «оператор >>» должен иметь, по меньшей мере, одного параметра класса или е Тип нумерации Семантический Выпуск Перегруженный «оператор < <» должен иметь, по меньшей мере, одного параметра класса или перечисления типа
и об ошибке сообщается в файле explicit_operator_bool.hpp от повышающего Вход на этих линиях:
.
.
.
} // namespace boost
// These operators are not found through ADL
template< typename T > void operator<< (T const&, boost::log::aux::unspecified_bool_type);
template< typename T > void operator>> (T const&, boost::log::aux::unspecified_bool_type);
#define BOOST_LOG_EXPLICIT_OPERATOR_BOOL()\
.
.
.
стек я получаю в Xcode выглядит следующим образом:
/usr/local/include/boost/log/utility/explicit_operator_bool.hpp:67:29: error: overloaded 'operator>>' must have at least one parameter of class or enumeration type [2]
In file included from /usr/local/include/boost/log/attributes/attribute_name.hpp:27:
In file included from /usr/local/include/boost/log/attributes/attribute_set.hpp:28:
In file included from /usr/local/include/boost/log/sources/basic_logger.hpp:37:
In file included from /usr/local/include/boost/log/sources/severity_logger.hpp:27:
In file included from /usr/local/include/boost/log/trivial.hpp:25:
In file included from /Volumes/Macintosh HD 2/code/Logging Tut 1/loggingTut1/loggingTut1/main.cpp:18:
Overloaded 'operator>>' must have at least one parameter of class or enumeration type in /usr/local/include/boost/log/utility/explicit_operator_bool.hpp
boost :: log еще не поддерживается. Поэтому не удивительно, что он не компилируется на каждой мыслимой платформе и компиляторе. –