inline std::ostream& operator<<(std::ostream& p, const std::vector<unsigned int>& vector){
p << "[ ";
for(auto i:vector){
p << " "<< i << " ,";
}
p<< "]";
return p;
}
#define LOG_DEBUG_MESSAGE BOOST_LOG_SEV(my_logger::get(), debug)
std::vector<unsigned int> test {1, 2, 3};
LOG_DEBUG_MESSAGE << "test "<< test;
std::cout << test << std::endl;
您好,
我重载了我的运算符&lt;&lt;对于std :: vector。当我使用std :: cout时效果很好,但是使用boost log我会得到以下错误:
boost / log / utility / formatting_ostream.hpp:710:19:错误:无法绑定 &#39;的boost ::登录:: v2_mt_posix :: basic_formatting_ostream :: ostream_type {aka std :: basic_ostream}&#39; lvalue to&#39; std :: basic_ostream&amp;&amp;&#39; strm.stream()&lt;&lt;值;
/opt/gcc.4.9.1/include/c ++ / 4.9.1 / ostream:602:5:注意:初始化 参数1&#39; std :: basic_ostream&lt; _CharT,_Traits&gt;&amp; std :: operator&lt;&lt;(std :: basic_ostream&lt; _CharT,_Traits&gt;&amp;&amp;,const _Tp&amp;) [与_CharT = char; _Traits = std :: char_traits; _Tp = 的std ::矢量]&#39; 运算符&lt;&lt;(basic_ostream&lt; _CharT,_Traits&gt;&amp;&amp; __os,const _Tp&amp; __x)
我不知道为什么升压日志不起作用。它使用相同的&lt;&lt;运营商还是?在具有自己的类的其他示例中,它适用于重载。我不知道我错过了什么。任何人都知道如何解决这个错误?
答案 0 :(得分:5)
&#39; boost :: log :: basic_formatting_ostream不是从std :: ostream派生的。
你应该重载operator&lt;&lt;对于std :: vector和重载运算符应该使用boost :: log :: formatting_ostream&amp;作为它的第一个参数。
检查下面修改后的代码示例:
inline boost::log::formatting_ostream& operator<<(boost::log::formatting_ostream& p, std::vector<int>& vector)
{
p << "[ ";
for(auto i:vector){
p << " "<< i << " ,";
}
p<< "]";
return p;
}