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_set
或std::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。
请参阅本指南 :
- C / C ++ Build-> Settings-> GCC C ++ Compiler-> Dialect
- 在“语言标准”中select“ISO C ++ 11(-std = c ++ 0x)”
- 应用并确定
- 重build项目,它的工作:)