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

时间:2013-07-03 20:00:30

标签: eclipse eclipse-cdt eclipse-juno eclipse-kepler eclipse-luna

编辑:事实证明这并非特定于Eclipse Kepler。我不得不对Eclipse Juno使用相同的过程。问题是其他帖子似乎缺少回答同一问题的步骤。

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

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

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

Eclipse CDT C++11/C++0x support

并且为Eclipse Juno提供的解决方案无效。

不同的评论表明重启日食,清洁和重建。这并没有什么不同。

8 个答案:

答案 0 :(得分:185)

您需要做两件事,首先需要设置编译器,然后需要设置CDT的语言处理器。既然你没有提到你正在使用哪个编译器,我会假设它是GCC,但其他编译器的步骤类似。 (请注意,您需要一个支持C ++ 11的编译器。)

设置编译器非常简单:

  1. 右键单击您的项目,然后单击“属性”
  2. 在C / C ++ Build下单击设置
  3. 在GCC C ++编译器下,单击“其他”
  4. 在“其他标志”框中,将“-std = c ++ 11”附加到标记列表中。
  5. 单击“应用”和“确定”
  6. 此时,您应该能够重建项目并使其运行。但是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,然后单击“重新解析未解析的包含”。

答案 1 :(得分:25)

Eclipse Kepler Service Release 1中的C ++ 11支持(构建ID:20130919-0819)

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

  1. 右键单击您的项目,然后单击属性
  2. 导航至 C / C ++ General 预处理器包含路径,宏等
  3. 选择提供商标签
  4. -std = c ++ 11 添加到命令以获取编译器规范:
  5. 应用更改,应自动生成索引。
  6. “获取编译器规范的命令:” -line应如下所示:

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

答案 2 :(得分:13)

从CDT 8.3(available as a Kepler update)开始,构建设置中有一个新的方言选项:

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

答案 3 :(得分:6)

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

1 - 右键单击​​项目>> Proprietes>> C / C ++ Build :: Settings

2 - 去GCC G ++编译器>>其他>>其他旗帜

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

解决了我的问题!

我希望它有所帮助!

答案 4 :(得分:4)

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

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

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

答案 7 :(得分:0)

MrEricSir提供的解决方案仅在安装了最新的Eclipse Oxygen CDT后才能运行。用火星CDT对我没用。