编辑:事实证明这并非特定于Eclipse Kepler。我不得不对Eclipse Juno使用相同的过程。问题是其他帖子似乎缺少回答同一问题的步骤。
我正在使用Eclipse Kepler for C ++,我正在尝试使用C ++ 11并获得错误。当我编译时,我得到错误
错误:C ++ 98模式中不允许使用基于范围的for循环
我已按照帖子中的说明进行操作
Eclipse CDT C++11/C++0x support
并且为Eclipse Juno提供的解决方案无效。
不同的评论表明重启日食,清洁和重建。这并没有什么不同。
答案 0 :(得分:185)
您需要做两件事,首先需要设置编译器,然后需要设置CDT的语言处理器。既然你没有提到你正在使用哪个编译器,我会假设它是GCC,但其他编译器的步骤类似。 (请注意,您需要一个支持C ++ 11的编译器。)
设置编译器非常简单:
此时,您应该能够重建项目并使其运行。但是CDT仍然可能显示C ++ 11包含的错误。以下是解决这个问题的方法:
答案 1 :(得分:25)
Eclipse Kepler Service Release 1中的C ++ 11支持(构建ID:20130919-0819)
在最新版本的Eclipse Kepler SR1中,您只需要添加 -std = c ++ 11
“获取编译器规范的命令:” -line应如下所示:
${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
答案 2 :(得分:13)
从CDT 8.3(available as a Kepler update)开始,构建设置中有一个新的方言选项:
答案 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对我没用。