Eclipse抱怨:"Invalid overload of 'endl'" - 但代码确实可以编译
Eclipse complains: "Invalid overload of 'endl'" - but code does compile
我写了一个运算符<lt;对于我的模板类:
template<class T>
std::ostream& operator<<(std::ostream &strm, const MyClass<T> &obj)
当我写时
cout << myClassInstance << endl;
它编译并运行,但我的Eclipse CDT说:
"endl"的过载无效
为什么它告诉我?
(我在Win7 64位上使用Eclipse CDT Kepler和Cygwin gcc)
问题在于(据我所知)Eclipse的代码分析工具。
如果您愿意,您可以通过完全禁用无效过载检查来避免此消息:
- 打开"首选项"窗口(从主菜单"窗口\首选项")
- 转到C/C++->代码分析
- 在右侧窗格中,请参阅"语法和语义错误"|"无效重载"
- 取消选中复选框
- 按OK
然后你会看到错误消失了。
然而,它可能会跳过真正的错误,最好让它保持检查状态,但使用"自定义所选"按钮来更改其严重性级别。
我已将其更改为"警告",而不是"错误"。
正如@plasmaHH所说,我认为Eclipse在这种情况下无法正确解析C++。
我也收到了这个错误。
//print the value
cout << rt->element << endl;
一个简单的改变:
//print the value
cout << rt->element;
cout << endl;
为我删除了错误。C++新手,但似乎你也需要重载<lt;对于myClassInstance。如果要使用原始方法。
这确实是Eclipse CDT(更具体地说是Eclipse的代码分析工具CODAN)的一个错误。有错误报告,它已经被修复,应该可以从CDT 8.3.0中获得,该报告将于2014年2月到期。
您可以尝试添加注释// @suppress("Invalid overload")
,如下行所示:
cout << "SOME TEXT" << endl; // @suppress("Invalid overload")
这将抑制该问题,同时保持检测代码中其他可能的无效重载的能力。
顺便说一句,如果你点击编辑器左侧的bug,Eclipse就会帮你完成。(Eclipse:氧气)。
我知道这是一个老问题,但我在Ubuntu 16.04 LTS 上的Eclipse Neon(v4.6.0)中遇到了类似的问题
我的代码是:
stringstream l_Buffer;
l_Buffer << "test" << endl;
const char* l_Temp = l_Buffer.str().c_str();
eclipse报告了3个错误:
- "endl"的重载无效
- 无法解析方法"c_str"
- 无法解析方法"str"
我尝试了很多东西,重建索引,摆弄代码分析工具(以与构建相同的方式配置它),以及编写std::endl
。。。一切都无济于事。
在我的案例中,修复所有三个错误的方法是更换
stringstream l_Buffer;
带有:
basic_stringstream<char> l_Buffer;
注意:按住Ctrl键并单击stringstream
,您将看到其在iosfwd.h
中的typedef定义,即:
/// Class for @c char mixed input and output memory streams.
typedef basic_stringstream<char> stringstream;
尽管这是一个老问题,但对于未来的访问者来说,让我忘记错误的是简单地使用完全合格的cout和endl:
std::cout << thing << std::endl
不知道Eclipse为什么会抱怨,因为它在代码中没有命名空间的情况下编译和运行得很好。
尝试放置std::endl而不是endl或者作为会员在你的班级内超载:
template<class T>
MyClass<T>& operator<<( std::ostream&(*f)(std::ostream&) ) {
std::cout << f;
return *this;
}
当我升级eclipse时,这种情况一直发生在我身上。它具有Member declaration not found
、invalid overload of endl
、Invalid arguments ...
的所有奇异误差。现在我发现这是工作区中的信息,旧项目对于新的CDT密码来说不是最新的。
因为有些人在升级eclipse或将工作区复制到新平台后也有同样的问题。它实际上很容易解决:Project->C/C++ index->Rebuild
。完成后,所有奇怪的错误都会消失。
- 如何修复sfml c++代码编译错误
- 尝试用java代码编译和运行c++代码
- 此代码编译良好,但文件未创建?请指出错误
- 为什么我的 BaseClass:Method 代码编译(带有单冒号)?
- 代码编译没有任何输出,入门程序
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- 代码编译但不起作用!cmd窗口只是理想和理想,但什么也没发生
- 无法使用 g++ 使用C++代码编译 C 库
- 如何在Ubuntu中使用Visual Studio代码编译C++代码
- 推力+提升代码编译错误
- C++代码编译,但在 Zorin OS 上运行时显示错误
- 如何在使用模板时将 CPP 代码编译到库文件中
- 是否可以将Visual Studio 2017将C 代码编译到EXE以外的文件类型中
- 使用 Visual Studio for C++ 代码编译错误
- 使用 Android Studio 使用本机代码编译 apk 时,如何在链接处删除 libgnustl_static.
- 使用 Emscripten 将 OpenCV 代码编译C++ Javascript
- 将C 代码编译到独立应用程序.App
- 为什么此代码编译 (C++11) 而没有类型不匹配错误
- 重用编译器前端的结果,以加快多个配置/平台的C++代码编译
- 如何将C++11代码编译为网络汇编