我正在尝试从源代码编译 libgtextutils(fastxtoolkit 需要)。 “./configure”命令运行良好,但随后的“make”命令产生了一个我无法解决的错误。
text_line_reader.cpp: In member function ‘bool TextLineReader::next_line()’:
text_line_reader.cpp:47:9: error: cannot convert ‘std::istream {aka std::basic_istream<char>}’ to ‘bool’ in return
return input_stream ;
^~~~~~~~~~~~
make[3]: *** [text_line_reader.lo] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
我使用的是 Mac,OSX 10.11.6 (Intel)
非常感谢任何可能解决此问题的建议。
最佳答案
参见 Porting to GCC 6指南,它将此记录为由于 GCC 6 默认为 C++14 模式而不是 C++03 模式而必须处理的更改之一:
Cannot convert 'std::ostream' to 'bool'
As of C++11, iostream classes are no longer implicitly convertible to
void*
so it is no longer valid to do something like:bool valid(std::ostream& os) { return os; }
Such code must be changed to convert the iostream object to bool explicitly, e.g.
return (bool)os;
orreturn static_cast<bool>(os);
另一种选择是显式使用 -std=c++03
在你的编译器标志中以 C++03 模式编译,但最好修复代码。上面给出的修复将使代码与任何 C++ 版本兼容。
关于c++ - make 失败,返回错误 "cannot convert ‘std::istream {aka std::basic_istream<char>}’ 到 ‘bool’”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38659115/