Eclipse索引器无法解析shared_ptr

Dyl*_*ens 35 c++ eclipse c++11

在互联网上研究这个之后,我一直无法让Eclipse索引器解决GCC 4.4.4附带的C++ 0x附加内容中的"shared_ptr".我确保用Eclipse的正确包含创建我的项目,所以它肯定在查看4.4.4包含文件夹.

程序编译并运行得很好.要访问shared_ptr我正在使用"#include <memory>".

知道是什么打破了索引器吗?

Dav*_*e S 50

您需要将预处理器符号' __GXX_EXPERIMENTAL_CXX0X__ '设置为eclipse项目.当你使用'-std = c ++ 0x'时,g ++会自动添加,但eclipse不知道这一点,因此它将相关标题的那些部分视为已禁用.

  • @DaveS - 嗨,很抱歉用一个旧问题打扰你,但添加符号`__GXX_EXPERIMENTAL_CXX0X__`对我来说不起作用,还有其他建议吗?提前告诉你;) (9认同)
  • @ AnschelSchaffer-Cohen:项目属性 - C/C++通用 - 路径和符号 - 符号 - GNU C++ (7认同)
  • 您可以通过将-std = c ++ 0x添加到项目属性中C/C++ Build的Discovery选项中的"编译器调用参数"来自动添加它. (4认同)
  • @Matteo你最后怎么做到了? (3认同)

Dea*_*ill 9

我在Windows下使用Eclipse 4.5.1(Mars.1)和Cygwin 2.3.0(GCC 4.9.3)遇到了这个问题.

由于<memory>标头中的这样的行,索引器找不到shared_ptr.__cplusplus宏正在评估除C++ 11(又名201103)之外的其他内容,因此包含较旧的auto_ptr.h而不是shared_ptr.h.为什么?以下项目属性的屏幕截图显示在CDT GCC内置编译器设置下检测到C++ 98(199711).

#if __cplusplus >= 201103L
#  include <bits/shared_ptr.h>
#else
#  include <backward/auto_ptr.h>
#endif
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

告诉Eclipse使用C++有两种可能的解决方案:

  • 在同一预处理器包含路径屏幕上,滚动到"设置条目"区域的顶部.展开CDT用户设置条目.为__cplusplus = 201103L添加新的预处理器宏.为发布和调试配置执行此操作.然后重建索引.

  • 如果要将CDT GCC内置编译器设置默认为对所有项目使用201103,则编辑language.settings.xml文件(在Windows下,这是c:\ Users\deanhill\workspace\.metadata\.plugins\org .eclipse.cdt.core\language.settings.xml).设置__cplusplus = 201103L.重新启动Eclipse并重建索引.