使用GCC 7.3.0发生位移错误
In file included from show_factory.h:21:0,
from show.h:21,
from main.cpp:27:
common.h: In member function ‘bool tfs::tools::ServerInfo::operator<<(std::ostream&) const’:
common.h:173:22: error: cannot convert ‘std::basic_ostream<char>::__ostream_type {aka std::basic_ostream<char>}’ to ‘bool’ in return
return os << server_id_;
^~~~~~~~~~
Makefile:630: recipe for target 'main.o' failed
如何在此处更改代码以使其安全无虞?
在旧版GCC(<= 5)中,这应该可以正常编译(根据其仓库https://github.com/yage99/tfs)。 它是GCC 7.3.0的新功能吗?
答案 0 :(得分:1)
std::ostream
到bool
的转换被标记为explicit
。 return
语句中不考虑显式转换;您需要显式转换。
作为旁注:用于插入流中的operator<<
重载的返回类型传统上为std::ostream&
。这允许插入链接,例如std::cout << foo << bar
。您的operator<<
重载通常也应该是一个自由函数,而不是成员。成员不允许使用标准的stream << object
语法。