make失败,错误“无法将'std :: istream {aka std :: basic_istream <char>}'转换为'bool'作为回报​​”

时间:2016-07-29 12:39:33

标签: 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(英特尔)

任何可能解决此问题的建议都受到高度赞赏。

4 个答案:

答案 0 :(得分:14)

请参阅Porting to GCC 6指南,该指南将此作为您必须处理的更改之一,因为GCC 6默认为C ++ 14模式而不是C ++ 03模式:

  

无法转换&#39; std :: ostream&#39;到&#39; bool&#39;

     

从C ++ 11开始,iostream类不再可以隐式转换为void*,因此执行以下操作不再有效:

bool valid(std::ostream& os) { return os; }
     

必须更改此类代码才能将iostream对象明确转换为bool,例如return (bool)os;return static_cast<bool>(os);

另一种选择是在编译器标志中明确使用-std=c++03来编译C ++ 03模式,但修复代码会更好。上面给出的修复将使代码与任何C ++版本兼容。

答案 1 :(得分:0)

这是因为使用了更新版本的gcc编译器(C ++ 11)。

使用composite_node解决问题。

示例:更改

static_cast<bool>()

success = move_group.move();

答案 2 :(得分:0)

根据Muthanna和Jonathan的回答,对于绝对不了解C ++但想在* unix上安装fastx-toolkit并遇到这些具有挑战性的回答的人,答案是在解压缩源代码后运行此命令:

Bad value Cache-Control for attribute http-equiv on element meta

这使得其他受访者建议进行的更改显然要多得多,而无需理解他们在说的一句话。这应该使其对我们中那些只想安装一些旧软件并且不希望学习如何编写C ++的人(只是...)

答案 3 :(得分:0)

另一种选择是覆盖make命令中的C ++标志:

make CXXFLAGS='-std=c++03 -O1'

above所述,fastx也将出现编译错误,但如果通过则将编译

make CXXFLAGS=-O1