14

可能重复:
关闭 Eclipse 错误(这不是真正的错误)

我正面临这个烦人的问题:Eclipse 拒绝识别该std::to_string函数,但我的程序编译时没有错误。我错过了什么?

根据cppreferencestd::to_string函数是在 中定义的<string>,因此我将其明确包含在犯罪.cpp文件中。我也试过这个这个这个解决方案,但没有运气。

还有其他建议吗?

编辑:

我在 Linux 下使用 g++ 4.7.2。

4

2 回答 2

30

更新: 自从我发布原始答案以来已经很长时间了,它已经过时了。我今天(2014 年 3 月 15 日)仔细检查了:在 Eclipse Kepler(内部版本号 20130614-0229)中,足以

  • Project > Properties > C/C++ Build > Settings然后在Tool Settings选项卡 上添加GCC C++ Compiler > Miscellaneous-std=c++11标志,

  • 然后在Window > Preferences > C/C++ > Build > SettingsDiscovery选项卡上选择CDT GCC Built-in Compiler Settings并将-std=c++11标志添加到Command 以获取编译器规格。在我的机器上,更改后它看起来像这样:

    ${COMMAND} -E -P -v -dD -std=c++11 "${INPUTS}"

  • 清理并重建您的项目索引(Project > C/C++ Index > Rebuild),因为 Eclipse 倾向于缓存错误消息并显示它们,即使它们在更改设置后消失了。

这肯定适用于我的机器。如果它不在你的身上,那么你可能想试一试:C++11 full support on Eclipse虽然我不确定这种方法的正确性,也没有必要在我的机器上这样做。截至 2014 年 3 月 7 日,用户声称它对他们有帮助,而上述方法没有。


原来的帖子,现在已经过时了:

看来您遇到了 Codan 的常见问题,请在此处查看我的答案


代码如何编译并不是 100% 清楚的。在 Eclipse 中?或者从命令行,正确设置标志?所以以防万一:

您正在使用 C++11 函数。您是否将-std=c++0x-std=c++11标志传递给编译器(假设 gcc)?

您可能还必须添加__GXX_EXPERIMENTAL_CXX0X__到您的定义(再次假设 gcc)并重新启动 Eclipse。

于 2013-01-17T14:41:25.817 回答
10

在我的情况下,eclipse 认为__cplusplus被定义为,199711L但我很确定这应该被定义为类似的东西,201103L因为libstdc++ v3使用

#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else

在大多数新的 C++11 头文件中<future>,例如. 虽然在编译时我绝对没有错误。这种奇怪的行为显然使 Eclipse 感到困惑,并使其无法正确地对包含的文件进行措辞。basic_string.h<string>g++ (Built by MinGW-builds project) 4.8.0 20121225 (experimental)

在包含 C++11 文件之前定义__cplusplus一些东西201103L应该可以修复虚假的 Eclipse 语法错误,例如Symbol 'shared_ptr' could not be resolved.

#undef __cplusplus
#define __cplusplus 201900L

重新定义后,您需要右键单击项目Index -> Rebuild & Freshen all files,或者更好地重新启动 Eclipse。

于 2013-01-17T15:59:45.323 回答