编译用于创建boost.log格式的代码时出错
Error compiling code for creating boost.log format
我正试图在Ubuntu 18.04 LTS上使用gcc 7.3.0编译以下代码,选项为-std=c++14:
auto createLogFormatter()
{
boost::log::expressions::stream_type stream;
stream << boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S ")
<< boost::log::expressions::attr<int>("Severity")
<< " " // ERROR HERE
<< boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID")
<< " "
<< boost::log::expressions::smessage;
return stream;
}
并得到奇怪的错误:
Log.cpp:51:13: error: no match for ‘operator<<’ (operand types are ‘boost::log::v2_mt_posix::expressions::aux::make_output_actor<boost::phoenix::actor<boost::log::v2_mt_posix::expressions::aux::attribute_output_terminal<boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::phoenix::argument<2> >, 0> >, boost::posix_time::ptime, boost::log::v2_mt_posix::fallback_to_none, boost::log::v2_mt_posix::aux::light_function<void(boost::log::v2_mt_posix::basic_formatting_ostream<char>&, const boost::posix_time::ptime&)> > >, boost::log::v2_mt_posix::expressions::attribute_actor<int, boost::log::v2_mt_posix::fallback_to_none, void, boost::phoenix::actor>, int, false>::type {aka boost::phoenix::actor<boost::log::v2_mt_posix::expressions::aux::attribute_output_terminal<boost::phoenix::actor<boost::log::v2_mt_posix::expressions::aux::attribute_output_terminal<boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal, boost::proto::argsns_::term<boost::phoenix::argument<2> >, 0> >, boost::posix_time::ptime, boost::log::v2_mt_posix::fallback_to_none, boost::log::v2_mt_posix::aux::light_function<void(boost::log::v2_mt_posix::basic_formatting_ostream<char>&, const boost::posix_time::ptime&)> > >, int, boost::log::v2_mt_posix::fallback_to_none, boost::log::v2_mt_posix::to_log_fun<void> > >}’ and ‘const char [2]’)
stream << boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S ")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<< boost::log::expressions::attr<int>("Severity")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<< " "
^~~~~~
根据Boost的例子,这样的东西应该是有效的:
expr::stream
<< expr::attr< unsigned int >("LineID")
<< ": <" << logging::trivial::severity
<< "> " << expr::smessage
但我犯了这样的错误。我做错了什么?
编译器错误可能是由缺少include引起的。Lambda表达式运算符由Boost.Fenix在boost/phoenix/operator.hpp
中提供。或者您可以只包含boost/log/expressions.hpp
,它提供所有Boost.Log表达式节点以及运算符。
但除此之外,createLogFormatter
函数是不正确的,因为它丢弃了整个格式化程序表达式。您不应该创建并返回stream
对象,它只是启动格式化程序表达式的终端。您需要返回作为lambda表达式结果创建的函数对象。
auto createLogFormatter()
{
auto fmt = stream << boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S ")
<< boost::log::expressions::attr<int>("Severity")
<< " " // ERROR HERE
<< boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID")
<< " "
<< boost::log::expressions::smessage;
return fmt;
}
如果您想要一个稳定的返回类型,可以使用boost::log::formatter
来包装表达式。
相关文章:
- 在Linux for Windows上编译C++代码时出错
- 尝试将另一个子句添加到代码中时出错
- 将代码从 Python 转换为 C++ 时出错
- <limits> 使用 VSC2019 编译旧代码时出错
- 使用 Visual Studio 代码读取 C++ 中的输入流时出错
- 在OpenGL中使用程序集代码渲染视频时出错
- 编译以下代码时出错
- Boost FFT示例-编译时出错,这段代码在做什么
- 编译在 Python 代码内部调用的 C++ 代码时出错,使用 Boost Python
- C++:为什么这段代码会出错?多元线性回归
- 混合开放MP/MPI代码中的多线程发送/接收时出错
- 将节点 js 代码集成到 cpp 库时出错
- 构建代码时出错
- 在字符串流中使用来自 github 的代码时出错
- 在主代码中调用 .hpp 函数时出错
- 将 find_if() 与数组一起使用的代码段中出错
- 这段带有副本C++08的代码出错
- 我在做什么这个C++代码出错了
- 我的函数代码出错(停止工作)
- 打开txt文件并创建值返回函数的代码出错