Eclipse抱怨:"'endl'的重载无效" - 但代码确实编译

ein*_*ica 22 c++ templates operator-overloading eclipse-cdt

我为我的模板类写了一个运算符<<

template<class T>
std::ostream& operator<<(std::ostream &strm, const MyClass<T> &obj)
Run Code Online (Sandbox Code Playgroud)

当我写作

cout << myClassInstance << endl;
Run Code Online (Sandbox Code Playgroud)

这编译并运行,但我的Eclipse CDT说:

'endl'的重载无效

为什么告诉我这个?

(我在Win7 64bit上使用Eclipse CDT Kepler和Cygwin gcc)

frm*_*ryr 13

I was getting this error as well.

//print the value
cout << rt->element << endl;
Run Code Online (Sandbox Code Playgroud)

A simple change to:

//print the value
cout << rt->element;
cout << endl;
Run Code Online (Sandbox Code Playgroud)

为我删除了错误.C++的新手,但似乎你还需要重载<< for myClassInstance.如果要使用原始方法.


iNF*_*TEi 12

这确实是Eclipse CDT(更具体地说是Eclipse的代码分析工具CODAN)的一个错误.有bug报告,它已经修复,应该从2014年2月到期的CDT 8.3.0中获得.

  • 我正在运行CDT 8.4,但仍然看到了这个问题. (6认同)
  • 还在2017年! (3认同)

pho*_*oad 11

问题是(据我所知)使用Eclipse的代码分析工具.

如果您愿意,可以通过完全禁用无效重载检查来避免此消息:

  1. 打开首选项窗口(从主菜单Window\Preferences)
  2. 转到C/C++ - >代码分析
  3. 在右侧窗格中,请参阅"语法和语义错误" "无效过载"
  4. 取消选中复选框
  5. 按确定

然后你会看到错误消失了.

但是,它可能会跳过真正的错误,最好让它保持检查状态,但使用"Customize Selected"按钮更改其严重性级别.

我已将其更改为"警告"而不是"错误".

正如@plasmaHH所说,我认为Eclipse在这种情况下无法正确解析C++.