c++ - make 失败,返回错误 "cannot convert ‘std::istream {aka std::basic_istream<char>}’ 到 ‘bool’”

标签 c++ macos c++11 makefile configure

我正在尝试从源代码编译 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; or return 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/

相关文章:

c++ - 模板推导失败

c++ - 黑莓 10 联系人图片到字节数组

macos - 在Docker容器中使用setuid

c++ - 具有智能指针的非虚拟删除器

c++ - 从文本文件中提取运算符和数字的长方程加法/减法计算器

c++ - 可以将两个(或更多)jpeg2000 组合成一个更大的而不将它们解码为位图吗?

java - 如何创建我的 java 项目的 .app 文件以在 mac os 上运行

macos - 在 VPN 连接 Mac OS X 中添加路由

c++ - 调用基类克隆实现

c++ - 使用 std::optional 来避免函数中的默认参数有什么好处吗?