Eclipse索引器无法解析shared_ptr

时间:2011-11-29 14:55:20

标签: c++ eclipse c++11

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

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

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

5 个答案:

答案 0 :(得分:50)

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

答案 1 :(得分:9)

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

索引器无法找到shared_ptr,因为< memory>中的行是这样的。头。 __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

enter image description here

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

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

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

答案 2 :(得分:4)

虽然我迟到了,但这对我有用:

右键单击Project-&gt; Properties-&gt; C / C ++ General-&gt;预处理器包含路径,宏等 - &gt;点击&#34;提供商&#34;标签 - &gt; CDT GCC内置编译器设置

取消选中&#34;使用项目之间共享的全球提供商&#34;

添加-std = c ++ 0x

它看起来像这样:

${COMMAND} ${FLAGS} -E -P -v -dD -std=c++0x "${INPUTS}"

重建索引。

使用Debian Jessie + Eclipse Kepler Build id:20140224-0627

答案 3 :(得分:2)

我遇到了同样的问题。我已将 GXX_EXPERIMENTAL_CXX0X 以及-std=c++11添加到工作区中的编译器选项中。但它并没有解决我的问题。

我又错过了一步: 右键单击Project-&gt; Properties-&gt; C / C ++ Build-&gt; Settings-&gt; Cross G ++ Compiler-&gt; Miscellaneous-&gt; Other flags 我变了 -c -fmessage-length=0-c -fmessage-length=0 -std=c++11

现在Eclipse看到std :: shared_ptr并正确索引它。

答案 4 :(得分:1)

对我来说,它是通过在以下位置设置other dialect flags = -std=c++11来实现的:

首选项-> C ++构建->设置-> GCC C ++编译器->方言

,以及在以下位置添加-std=c++11

首选项-> C ++常规->预处理器包含路径->提供程序-> CDT GCC内置编译器设置->命令以获取编译器规范

别忘了清理并重建项目/索引。