如何在Eclipse Juno / Kepler / Luna CDT中启用C ++ 11?


85

编辑:事实证明,这确实不是特定于Eclipse Kepler的。我必须对Eclipse Juno使用相同的过程。问题在于,其他职位似乎缺少回答这一问题的步骤。

我正在使用Eclipse Kepler for C ++,并且正在尝试使用C ++ 11并出现错误。编译时出现错误

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

我遵循了帖子中的指示

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

并且为Eclipse Juno提供的解决方案无法正常工作。

不同的意见建议重启日食并进行清理和重建。那并没有改变。

Answers:


183

您需要做两件事,首先需要设置编译器,然后需要设置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内置编译器设置”的项目。选择此项。
  5. 取消选中“使用全局提供程序...”选项
  6. 在列表下面有一个框,上面写着“获取编译器规范的命令”。附加“ -std = c ++ 0x”。
  7. 使用右侧的“上移”按钮将“ GCC内置编译器设置”提供程序移至列表顶部。
  8. 单击“应用”,然后单击“确定”。
  9. 返回Eclipse工作区,选择“项目”菜单,选择C / C ++索引,然后单击“重新解析未解决的包含项”。

1
谢谢。这工作了。也许我看错了我链接的另一篇文章,但是似乎没有提到在那篇文章中设置编译器。
user327301 2013年

1
对我不起作用。我的主要问题是未解决的c ++ 11包含。我放入-std=c++11了您所说的放置位置,并重建了完整索引,仍然显示大量无法识别的std :: cout,std :: set等…
Dolanor

2
编辑:我没有找到应该在第一部分,但我正在通过make进行编译,因此它可能是一种解释。(尽管我在工作区配置中找到了它并进行了设置)。但我将其放在中compiler spec,仍然无法正常工作。std :: shared_ptr和相同的无法识别。虽然它曾经在带有juno的旧机器上运行。
Dolanor

1
在我的情况下(gcc)我使用-std = c ++ 0x。因此,一切正常。谢谢!
丹尼斯·扎金

4
@MrEricSir是否可以对工作空间进行此设置,以便在我添加新项目时也将其自动应用到它?
Ivaylo Strandjev 2014年

25

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

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

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

“命令来获得编译器specs:”直插式应该是这样的:

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

2
使用GCC,我必须添加-std = c ++ 0x
ccook

您使用哪个GCC?c ++ 0X是C ++ 11的旧名称(别名)
MeJ 2014年

1
第二次发现这是设置新的Eclipse CDT-设置应该更直观。
ccook


6

我使用Eclipse Kepler并对其进行了修复:

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

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

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

那解决了我的问题!

希望对您有所帮助!


这是Eclipse平台版本4.3.1的最佳答案-不知道什么是Kepler / Juno!
TCSGrad 2014年

Eclipse Kepler是Eclipse版本
4.3.X

4

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


是的,适用于从旧项目迁移。
Guy L

2

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


1

我正在使用Eclipse Luna,并且C / C ++ Build-> Settings下没有“ Tool Settings”。我DID添加-std = C ++ 11到下编译器规格的命令行“C / C ++常规- >预处理器包括- >提供者”的建议。但这仍然不能满足我的索引器解析emplace()的能力。

因此,我在头文件中查找,发现emplace函数依赖于__cplusplus> = 201103L。因此,我仅添加了预处理程序符号“ __cplusplus”,并为其赋予了值201103。

Kinda有点黑,但索引器很高兴。(并且makefile定义我的构建标志,而不是eclipse项目)


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.