48

我在 Eclipse CDT 中配置了一个 C++11 项目以使用 gcc-4.7。它不是我系统上的默认编译器,它不支持 C++11。为了使编译工作,我需要传递标志-std=c++11并包含以下标头路径:/usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2

每当我使用像std::unordered_setorstd::unordered_map之类的 C++11 容器类型时,CDT 索引器都会抱怨:Symbol unordered_set could not be resolved. 如何告诉索引器正确解析这些符号?

这就是我配置索引器的方式:

在此处输入图像描述

据我了解设置,索引器应该使用当前活动构建配置中的编译器设置。编译工作正常,那么为什么不索引呢?

4

8 回答 8

84

在我的情况下,设置**__GXX_EXPERIMENTAL_CXX0X__**没有帮助(2014 年 7 月,Eclipse Kepler 20130919,Ubuntu 12.04)。

要修复 C++11 语法高亮,请访问:

项目属性 --> C/C++ 常规 --> 路径和符号 --> 符号 --> GNU C++

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

__cplusplus

有价值

201103L

更新:如果您使用较新版本的 Eclispe(截至 2016 年)并且仍然遇到相同的问题,请尝试 value(如 jose.diego 所指出的):

201402L

确保在项目设置中启用了索引器(C/C++ 通用 --> 索引器

然后重新索引(项目 --> C/C++ 索引 --> 重建

如果问题仍然存在,请再次重新索引。它现在应该可以工作了。

于 2014-07-08T08:44:27.323 回答
51

经过一些幸运的谷歌搜索后,我最近解决了这个问题。

单击您的项目并右键单击-> 属性

选择“C/C++ General -> Processor Include Paths, Macros etc...”

选择“提供者”选项卡

取消选择除“CDT 用户设置条目”和“CDT GCC 内置编译器设置”之外的所有内容

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

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

编辑底部标有“获取编译器规范的命令”的框

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

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

单击应用并确定。

在此处输入图像描述

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

于 2014-07-08T09:57:14.450 回答
35

如本论坛帖子所述:

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

  • 右键单击项目并转到“属性”C/C++ 常规 -> 路径和符号 -> 符号 -> GNU C++。
  • 单击“添加...”并粘贴__GXX_EXPERIMENTAL_CXX0X__到“名称”并将“值”留空。点击应用,做它要求你做的任何事情,然后点击确定。
于 2013-06-16T11:08:27.427 回答
9

或前往:

  • C/C++ Build->Discovery Options->GCC C++ 编译器

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

  • 立即清除发现的条目:单击清除

  • 重建项目

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

于 2013-06-16T17:17:07.857 回答
6

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

__cplusplus

价值:

201403

在项目的:路径和符号 -> 符号/GNU C++。

这在 eclipse Kepler CDT 版本:8.3.0.201402142303 中有效。

于 2014-06-28T21:59:34.070 回答
3

请参阅本指南

  1. C/C++ Build->Settings->GCC C++ Compiler->Dialect
  2. 在“语言标准”中选择“ISO C++11 (-std=c++0x)” 语言和方言
  3. 申请并确定
  4. 重建项目并且它可以工作:)
于 2017-04-08T01:46:29.327 回答
2

以下适用于Eclipse C/C++ Oxygen.2gcc-5.5.0

Eclipse Properties->C/C++ Build->Settings->GCC C++ Compiler->Dialect->Other dialect flags: -std=c++17

不要在Language standard下拉列表中选择任何内容。

于 2018-06-25T16:51:24.817 回答
0

以下配置可帮助我解决原始问题中指出的问题。

环境:Eclipse(Oxygen.3a Release (4.7.3a)),Cygwin64。如果您有不同版本的 Cygwin,您可以找到类似的目录,如下所示。

第 1 步:确保您有以下两个目录:

   C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include
   C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include\c++

如果您没有看到上述两个目录,请启动您的 Cygwin 安装程序并安装 gcc-core、gcc-g++ 和 libgcc1。

第 2 步:如果您没有看到以上两个包含目录,请将目录复制C:\cygwin64\lib\gcc\x86_64-pc-cygwin\7.4.0\include到。C:\cygwin64\usr

第 3 步:转到 Project Property->C/C++ General->Paths and Symbols 确保您可以看到列出了以下两个路径

   C:\cygwin64\usr\include
   C:\cygwin64\usr\include\c++

第 4 步:Property->C/C++ Build/Settings/选择 Cygwin PE Parser

第 5 步:Property->C/C++ Build/Tool Chain Editor 选择 Cygwin GCC

第 6 步:Property->C/C++ General/Indexer 选择 Enable indexer

第 7 步:项目->C/C++ 索引->重建

现在你的 Eclipse 应该能够看到 C++11 类型了。

于 2019-01-28T20:48:27.733 回答