在互联网上研究这个之后,我一直无法让Eclipse索引器解决GCC 4.4.4附带的C ++ 0x附加内容中的“shared_ptr”。我确保使用Eclipse的正确包含创建我的项目,因此它肯定会查看4.4.4包含文件夹。
程序编译并运行得很好。要访问shared_ptr我正在使用“#include< memory>”。
知道什么打破了索引器吗?
答案 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
有两种可能的解决方案告诉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内置编译器设置->命令以获取编译器规范。
别忘了清理并重建项目/索引。