Eclipse:函数'to_string'无法解析

时间:2013-01-17 14:23:20

标签: c++ eclipse c++11 eclipse-cdt

  

可能重复:
  Turn off eclipse errors (that arent really errors)

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

根据cppreference std::to_string函数在<string>中定义,因此我将其明确地包含在被控制的.cpp文件中。我还尝试了thisthisthis解决方案,但没有运气。

还有其他建议吗?

编辑:

我在Linux下使用g ++ 4.7.2。

2 个答案:

答案 0 :(得分:30)

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

  • 项目&gt;下添加属性&gt; C / C ++ Build&gt;设置然后在工具设置选项卡上 GCC C ++编译器&gt;杂项 -std=c++11标志,

  • 然后在 Window&gt;下偏好&gt; C / C ++&gt;构建&gt; Discovery 选项卡上的设置选择了 CDT GCC内置编译器设置,并将-std=c++11标志添加到命令以获取编译器规范< / em>的。在我的机器上,在更改后它看起来像这样:

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

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

这肯定会在我的机器上运行。如果它不在您的机器上,那么您可能想对此进行一次检查:C++11 full support on Eclipse虽然我不确定正确性这种方法也没有必要在我的机器上进行。截至2014年3月7日,用户claim对其有所帮助,而上述方法则没有。


原帖,现已过时:

<击>

<击>

您似乎遇到了Codan的常见问题,请参阅my answer here


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

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

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

<击>

答案 1 :(得分:9)

在我的情况下,eclipse相信__cplusplus被定义为199711L,但我很确定这应该被定义为201103L的某些内容,因为libstdc++ v3用途

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

在大多数新的C ++ 11标头中,例如<future>basic_string.h(其中std :: to_string的定义是)<string>包含的标头。虽然在使用g++ (Built by MinGW-builds project) 4.8.0 20121225 (experimental)进行编译时,我绝对没有错误。这种奇怪的行为显然会使eclipse混淆并使其无法正确表达所包含的文件。

在包含C ++ 11文件之前将__cplusplus定义为超过201103L的内容应修复虚假的eclipse语法错误,例如Symbol 'shared_ptr' could not be resolved

#undef __cplusplus
#define __cplusplus 201900L

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