Eclipse:函数'to_string'无法解析

Avi*_*vio 13 c++ eclipse eclipse-cdt c++11

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

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

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

还有其他建议吗?

编辑:

我在Linux下使用g ++ 4.7.2.

Ali*_*Ali 30

UPDATE: 这是一个很长的时间,因为我张贴的原始答案,它已经过时.我今天(2014年3月15日)双重检查:在Eclipse开普勒(编译号20130614-0229)就足够了

  • 下添加项目>属性> C/C++编译>设置然后上工具设置标签 GCC C++编译器>其它-std=c++11标志,

  • 然后在窗口>首选项> C/C++>构建>设置发现选项卡选择CDT GCC内置的编译器设置和添加-std=c++11标志命令来获得编译器的规格.在我的机器上,它在更改后看起来像这样:

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

  • 清洁和重建两个项目索引(项目> C/C++指数>重建)作为Eclipse的趋向缓存错误信息,并告诉他们,即使他们是在改变设置后消失.

这肯定适用于我的机器.如果它没有在你的上面,那么你可能想要对此有所了解:虽然我不确定这种方法的正确性,也不是必须在我的机器上进行,但是对Eclipse的C++ 11完全支持.截至2014年3月7日,用户声称它帮助了他们,而上述方法没有.


原帖,现已过时:

好像你遇到了Codan的常见问题,请看我的回答.


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

您正在使用C++ 11函数.你通过-std=c++0x-std=c++11标志编译器(假设GCC)?

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

  • 抱歉,我没有提到我在 Linux 下使用的是 g++ 4.7.2。是的,我在编译器的命令行中有 `-std=c++0x` 标志,我也尝试过使用 `-std=c++11` 并启用 `__GXX_EXPERIMENTAL_CXX0X__`,但无济于事。我看过你的回答,我怀疑我最终会手动禁用一些最烦人的错误。感谢您的回答,+1 已尝试。 (2认同)
  • @Avio是的,一般来说,你应该这样做,但是在Eclipse的情况下它是Codan中的一个错误,我认为你不会找到更好的解决方法.我报告了这个bug,你可以看到,没有发生任何事情:( (2认同)

Edw*_*d A 9

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

#if __cplusplus < 201103L
# include <bits/c++0x_warning.h>
#else
Run Code Online (Sandbox Code Playgroud)

在大多数新的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
Run Code Online (Sandbox Code Playgroud)

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

  • Eclipse Kepler,C++ general --->预处理器包含路径,宏等---> Entires ---> GNU C++ ---> CDT用户设置Entires添加__cplusplus 201103L (3认同)
  • @jean 您的答案适用于 Luna:`C++ General` -&gt; `Preprocessor Include Paths` -&gt; 在左侧窗格中的 `Entries` 选项卡下突出显示 `GNU C++`,然后在右侧窗格中突出显示 `CDT User Settings`,然后单击右侧的“添加”。在出现的弹出窗口中,选择`#preprocessor Macro`,`name` 使用**__cplusplus**,`value` 使用**201103L**。完成后,右键单击“项目资源管理器”下的项目 -&gt; 选择“索引”-&gt;“重建”。然后等待,`std::to_string` 下的红线会消失。 (2认同)