我正面临这个恼人的问题:Eclipse拒绝识别std::to_string
函数,但我的程序编译没有错误。我错过了什么?
根据cppreference std::to_string
函数在<string>
中定义,因此我将其明确地包含在被控制的.cpp
文件中。我还尝试了this,this和this解决方案,但没有运气。
还有其他建议吗?
编辑:
我在Linux下使用g ++ 4.7.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。