我正在尝试使用boost :: log库输出boost :: asio :: streambuf对象的内容。我通过以下方式定义了operator ostream& operator<<(ostream& ostr, const boost::asio::streambuf& buffer){ for (size_t i = 0; i < buffer.size(); ++i) { ostr << hex << (int) buffer_cast<const char*>(buffer.data())[i] << " "; } return ostr;}但是在尝试输出缓冲区的内容之后: BOOST_LOG_TRIVIAL(trace) << buffer;我有以下错误: 在包含的文件中 /home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/sources/record_ostream.hpp:31:0, 来自/home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/trivial.hpp:23, 从/home/bobeff/work/asio_netcomm_poc/server/src/server.cpp:14: /home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/utility/formatting_ostream.hpp: 在'typename的实例化 boost :: log :: v2_mt_posix :: aux :: enable_if_formatting_ostream :: type boost :: log :: v2_mt_posix :: operator boost :: log :: v2_mt_posix :: basic_formatting_ostream; T = boost :: asio :: basic_streambuf ;类型名 boost :: log :: v2_mt_posix :: aux :: enable_if_formatting_ostream :: type = boost :: log :: v2_mt_posix :: basic_formatting_ostream&]': /home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/sources/record_ostream.hpp:212:51: 必须来自'typename boost :: log :: v2_mt_posix :: aux :: enable_if_record_ostream :: type boost :: log :: v2_mt_posix :: operator = boost :: asio :: basic_streambuf ;类型名称boost :: log :: v2_mt_posix :: aux :: enable_if_record_ostream :: type = boost :: log :: v2_mt_posix :: basic_record_ostream&]' /home/bobeff/work/asio_netcomm_poc/server/src/server.cpp:88:47: 从这里需要 /home/bobeff/work/asio_netcomm_poc/third_party/lib/boost/boost/log/utility/formatting_ostream.hpp:840:19: 错误:无法绑定 'boost :: log :: v2_mt_posix :: basic_formatting_ostream :: ostream_type {aka std :: basic_ostream}'左值为'std :: basic_ostream &&' strm.stream() ^在/usr/include/c++/4.8/iostream:39:0包含的文件中, 从/home/bobeff/work/asio_netcomm_poc/server/src/server.cpp:1: /usr/include/c++/4.8/ostream:602:5:错误:初始化参数1 'std :: basic_ostream & std :: operator &&,const _Tp&) [with _CharT = char; _Traits = std :: char_traits; _Tp = boost :: asio :: basic_streambuf ]' 运算符 && __os,const _Tp&__x) ^输出缓冲区内容的正确方法是什么? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 ADL找不到您的operator<<。请参见this答案的第一部分。 (adsbygoogle = window.adsbygoogle || []).push({});