如何在Eclipse CDT中启用C++11/C++0x支持?

218

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

这是一段C++11代码的示例:

auto text = std::unique_ptr<char[]>(new char[len]);
Eclipse编辑器提示以下内容:
Function 'unique_ptr' could not be resolved

Makefile编译运行正常,如何让Eclipse停止抱怨这类错误?


12
至少应该使用 std::unique_ptr<char[]> - Cubbi
1
unique_ptr<char> 不会调用 delete,因为它是通过 new[] 创建的,这是错误的吗? - Dietrich Epp
7
@Nick: 不,他是正确的。你写的方式会调用 delete,但你需要调用 delete[]unique_ptr<char> 假设它得到的是一个指针,会使用 delete 进行删除。而 unique_ptr<char[]> 则期望一个数组,并使用 delete[] 正确地进行删除。 - Nicol Bolas
相关链接:https://dev59.com/i1_Va4cB1Zd3GeqPSVr_,https://dev59.com/z2oy5IYBdhLWcg3wHabt,http://stackoverflow.com/q/8564544/636019,https://dev59.com/PWsy5IYBdhLWcg3wzBF4 - ildjarn
评论者们,请了解语法。unique_ptr<char[]>是一种新的语法,用于调用delete[]。 - CashCow
显示剩余3条评论
17个回答

2
对我来说,在Eclipse Neon上,我遵循了这里Trismegistos的答案,但我还添加了一个额外的步骤:
  • 转到项目 -> 属性 -> C++常规 -> 预处理器包含路径、宏等 -> 提供程序 -> CDT Cross GCC内置编译器设置,追加标志"-std=c++11"
点击应用和确定。
干杯,
盖伊。

0

当使用交叉编译器时,我经常得到同事精心制作的高级定制构建系统。我使用“具有现有代码的Makefile项目”,因此大多数其他答案不适用。

在项目开始时,我必须在“具有现有代码的Makefile项目”向导中指定我正在使用交叉编译器。让人烦恼的是,在过去的10年左右中,该向导上的交叉编译器按钮不会提示交叉编译器的位置。因此,在修复C++问题和交叉编译器问题的步骤中,我必须像@ravwojdyla等回答中提到的那样转到提供程序选项卡,但我必须选择的提供程序是交叉编译器提供程序。然后,在命令框中放置编译器的完整路径,并添加-std = gnu++11以获取我希望支持的C ++标准。这效果不错。

您可以将其应用于现有项目。您可能需要重新运行索引器。

我从未不得不添加实验标志或覆盖__cplusplus的定义。唯一的问题是,如果我有大量现代C代码,则无处放置特定于C的标准选项。

当事情变得非常糟糕时,获取解析器日志并在索引器子菜单中使用该命令可以提供非常有用的信息。


0

要在Eclipse Luna中获得对C++14的支持,您可以执行以下步骤:

  • C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings中添加“-std=c++14”
  • C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous中添加“-std=c++14”

重新索引您的项目并最终重新启动Eclipse。它应该按预期工作。


0
  • 右键单击项目,进入“属性”
  • C/C++构建 -> 设置 -> 工具设置 -> GCC C++编译器 -> 杂项 -> 其他标志。在其他标志文本框的末尾输入-lm,然后点击确定。

这是哪个版本的Eclipse? - Braiam

0

Indigo 对于这个黑客版和清理版都不起作用。黑客版被忽略了,所需的配置选项也不见了。出乎意料的是,在之前并没有工作并且没有提供任何有用的原因后,构建开始工作了。至少从命令行上,我能获得可重复的结果。


0
在Mac上,我是这样解决的。我使用Homebrew安装了最新版本的gcc/g++,它们位于/usr/local/bin中,包含在/usr/local/include中。
我CD到/usr/local/bin并从g++@7whatever创建了一个符号链接到g++,因为那个@很烦人。
然后我进入MyProject -> Properties -> C/C++ Build -> Settings -> GCC C++ Compiler,并将命令从"g++"更改为"/usr/local/bin/g++"。如果您决定不制作符号链接,可以更加具体。
对于链接器也要做同样的事情。
应用并关闭。让它重新构建索引。一段时间内,它显示了令人生畏的错误数量,但我认为那是在构建索引时。当我弄清楚错误时,它们都消失了,无需进一步操作。

我认为你也可以进入Eclipse -> 属性 -> C/C++ -> 核心构建工具链并使用不同的路径进行编辑,但我不确定那会做什么。


0

我在使用Eclipse C++ 2019-03处理混合C和C ++项目时遇到类似问题,该项目使用了std :: optionalstd :: swap。 对我有效的方法是这样的。

在项目中, 属性-> C / C ++构建->设置->工具设置->交叉G ++编译器中,从Miscellaneous中删除-std = gnu ++ 17 ,并将其放入Dialect-> Other Dialect Flags中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接