Eclipse CDT索引器不知道C ++ 11容器

我在Eclipse CDT中configuration了一个C ++ 11项目来使用gcc-4.7。 这不是我的系统上的默认编译器,它不支持C ++ 11。 为了编译工作,我需要传递flag -std=c++11并且还包含以下头文件path: /usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2 -std=c++11 /usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2

每当我使用像std::unordered_setstd::unordered_map这样的C ++ 11容器types,CDT索引器就会抱怨: Symbol unordered_set could not be resolved 。 如何告诉索引器正确parsing这些符号?

这是我如何configuration我的索引器:

在这里输入图像描述

就我所了解的设置而言,索引器应该使用当前活动构buildconfiguration中的编译器设置。 编译工作正常,所以为什么不索引?

正如这个论坛上所描述的那样:

http://www.eclipse.org/forums/index.php/mv/msg/282618/

  • 右键单击该项目,然后进入“属性”C / C ++常规 – >path和符号 – >符号 – > GNU C ++。
  • 点击“添加…”并将__GXX_EXPERIMENTAL_CXX0X__粘贴到“名称”中,并将“值”留空。 点击应用,做任何事要求你做,然后点击确定。

设置**__GXX_EXPERIMENTAL_CXX0X__**对我来说没有帮助(2014年7月,Eclipse Kepler 20130919,Ubuntu 12.04)。

要修复C ++ 11语法突出显示,请转到:

项目属性 – > C / C ++常规 – >path和符号 – >符号 – > GNU C ++

并覆盖符号(即添加新符号):

 __cplusplus 

与价值

 201103L 

更新:如果您使用较新版本的Eclispe(截至2016年),仍然遇到同样的问题,尝试值(由jose.diego指出):

 201402L 

确保在项目设置中启用了索引器( C / C ++ general – > Indexer

然后reindex( 项目 – > C / C ++索引 – >重build

如果问题仍然存在再次索引。 它应该现在工作。

最近在一些幸运的谷歌search之后,我解决了这个问题。

点击您的项目,然后右键单击 – >属性

select “C / C ++常规– >处理器包含path,macros等…”

select “提供者”选项卡

取消select “CDT用户设置条目”和“CDT GCC内置编译器设置”以外的所有内容

点击 “CDT GCC内置编译器设置”

取消select “使用项目间共享的全局提供程序”

编辑标签为“获取编译器规格的命令”

插入命令-std = c + + 11,看起来像这样:

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

点击应用,然后确定。

在这里输入图像描述

这对我有效。 您可能需要重新编制项目索引。

或者转到:

  • C / C ++构build – >发现选项 – > GCC C ++编译器

  • 将您的标志添加到编译器调用参数。 像-std = c ++ 11 -m32

  • 清除发现的现在:单击清除

  • 重build项目

之后,所有符号将被更新为正确的值,索引器应按预期工作

对于我来说,使用外部构build器的项目的解决方法是定义符号:

__cplusplus

与价值:

201403

在项目中:path和符号 – >符号/ GNU C ++。

这在日食开普勒CDT版本:8.3.0.201402142303。

请参阅本指南 :

  1. C / C ++ Build-> Settings-> GCC C ++ Compiler-> Dialect
  2. 在“语言标准”中select“ISO C ++ 11(-std = c ++ 0x)” 语言和方言
  3. 应用并确定
  4. 重build项目,它的工作:)