85

编辑:事实证明,这确实不是 Eclipse Kepler 特有的。我不得不对 Eclipse Juno 使用相同的过程。问题是在回答同样问题的其他帖子中似乎缺少步骤。

我正在为 C++ 使用 Eclipse Kepler,我正在尝试使用 C++11 并遇到错误。当我编译我得到错误

错误:C++98 模式下不允许基于范围的 for 循环

我已按照帖子中的说明进行操作

Eclipse CDT C++11/C++0x 支持

并且为 Eclipse Juno 提供的解决方案不起作用。

不同的评论建议重新启动 eclipse 并清理和重建。这并没有什么不同。

4

8 回答 8

182

您必须做两件事,首先需要设置编译器,然后需要设置 CDT 的语言处理器。由于您没有提及您使用的编译器,我假设它是 GCC,但其他编译器的步骤将类似。(请注意,您当然需要支持 C++11 的编译器。)

设置编译器相当简单:

  1. 右键单击您的项目,然后单击属性
  2. 在 C/C++ 构建下单击设置
  3. 在 GCC C++ 编译器下,单击杂项
  4. 在“其他标志”框中,将“-std=c++11”附加到标记列表中。
  5. 单击应用和确定

此时,您应该能够重建您的项目并让它运行。但是 CDT 仍然可能显示 C++11 包含的错误。以下是您可以解决的方法:

  1. 右键单击您的项目,然后单击属性
  2. 在 C/C++ 常规下单击“预处理器包含路径、宏”
  3. 选择提供者选项卡
  4. 列表中应该有一个项目,上面写着“GCC Built in Compiler Settings”。选择此条目。
  5. 取消选中“使用全局提供程序...”选项
  6. 在列表下方有一个框,上面写着“获取编译器规范的命令”。在此附加“-std=c++0x”。
  7. 使用右侧的“上移”按钮移动列表顶部的“GCC 内置编译器设置”提供程序。
  8. 单击应用,然后单击确定。
  9. 回到您的 Eclipse 工作区,选择 Project Menu、C/C++ Index,然后单击“Re-resolve unresolve includes”。
于 2013-07-06T03:04:09.557 回答
25

Eclipse Kepler Service Release 1 中的 C++11 支持(内部版本 ID:20130919-0819)

在最新版本的 Eclipse Kepler SR1 中,您只需添加-std=c++11

  1. 右键单击您的项目,然后单击属性
  2. 导航到C/C++ 常规预处理器包括路径、宏等。
  3. 选择提供者选项卡
  4. -std=c++11添加到Command 以获取编译器规格:
  5. 应用更改,索引应自动生成。

获取编译器规范的命令:”- line 应该如下所示:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
于 2013-11-20T16:27:30.733 回答
13

从 CDT 8.3(作为 Kepler 更新提供)开始,构建设置中有一个新的方言选项:

http://wiki.eclipse.org/CDT/User/NewIn83#Build

于 2014-03-18T13:05:29.653 回答
6

我使用 Eclipse Kepler 并修复它,我这样做了:

1 - 右键单击​​项目 >> 属性 >> C/C++ 构建 :: 设置

2 - 转到 GCC G++ 编译器 >> 杂项 >> 其他标志

 i then added -std=c++11 
 hit apply and ok

这解决了我的问题!

我希望它有帮助!

于 2013-12-27T00:14:24.173 回答
4

在这里运行 eclipse indigo 和 cdt 8.0.2。我遵循了所有指南,但仍然需要手动设置预处理器定义以查找 std::unique_ptr 之类的内容。包含文件“内存”检查这一点。在项目属性的“C++ 常规”中的“路径和符号”下的“符号”选项卡上将 __cplusplus 设置为 201103L。

于 2014-04-07T18:05:17.270 回答
2

将方言标志“-std=c++11”添加到项目属性-> C/C++ 构建-> 设置-> 工具设置(GCC C++ 编译器-> 方言)解决了我在 Eclipse Kepler 中的问题,除了上述设置。

于 2016-05-02T23:31:49.213 回答
1

我正在使用 Eclipse Luna,C/C++ Build -> Settings 下没有“工具设置”。我确实按照建议将-std =c++11 添加到“C/C++ General -> Preprocessor Includes -> Providers”下的编译器规范命令行中。但这仍然不能满足我的索引器解析 emplace() 的能力。

所以我查看了头文件,发现 emplace 函数依赖于 __cplusplus >= 201103L。所以我只是添加了预处理器符号“__cplusplus”并将其值设为 201103。

有点骇人听闻,但索引器很高兴。(并且makefiles定义了我的构建标志,而不是eclipse项目)

于 2016-07-04T17:41:24.770 回答
0

MrEricSir 提供的解决方案只有在安装了最新的 Eclipse Oxygen CDT 后才能工作。Mars CDT 不适用于我。

于 2017-11-06T23:17:40.903 回答