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停止抱怨这类错误?


当前回答

当使用交叉编译器时,我经常得到同事精心设计的高级自定义构建系统。我使用“现有代码的Makefile项目”,所以大多数其他答案都不适用。

At the start of the project, I have to specify that I'm using a cross compiler in the wizard for "Makefile Project with Existing Code". The annoying thing is that in the last 10 or so years, the cross compiler button on that wizard doesn't prompt for where the cross compiler is. So in a step that fixes the C++ problem and the cross compiler problem, I have to go to the providers tab as mentioned by answers like @ravwojdyla above, but the provider I have to select is the cross-compiler provider. Then in the command box I put the full path to the compiler and I add -std=gnu++11 for the C++ standard I want to have support for. This works out as well as can be expected.

您可以对现有项目执行此操作。您可能需要做的唯一一件事就是重新运行索引器。

我从未需要添加experimental标志或重写__cplusplus的定义。 唯一的问题是,如果我有大量的现代C代码,我就无法放置特定于C的标准选项。

当情况非常糟糕时,在Indexer子菜单中使用该命令获取解析器日志,可以提供非常丰富的信息。

其他回答

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

在c++ General ->预处理器Include -> Providers -> CDT Cross GCC内置编译器设置中,添加"-std=c++14" 在c++ Build -> Settings -> Cross g++ Compiler -> Miscellaneous中,添加"-std=c++14"

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

我也有几个问题(Ubuntu 13.04 64位,g++-4.8, eclipse Juno 3.8.1, CDT 6.0.0)。上面提到了很多事情,抱歉重复那些,但另外我有问题使用

std::thread

作为c++11的一部分(为链接器添加-pthread可以解决这个问题)。不管怎样,最终这些设置工作正常:

项目->属性-> C/ c++构建->设置->其他。添加

-std=c++11

GCC和g++编译器的标志。单击Apply。

对于链接器,相同的窗口,杂项,链接器标志,添加

-pthread

国旗。共享库设置、共享对象名称、添加

-Wl,--no-as-needed

国旗。单击Apply。

C/ c++通用->路径和符号->符号选项卡,GNU c++选中,添加

__GXX_EXPERIMENTAL_CXX0X__

(没有价值)

国旗。单击Apply。

预处理器包含路径..—>提供商页签:检查

CDT GCC内置编译器设置

对于“命令获取编译器规格”,添加

-std=c++11

国旗。取消共享。单击Apply。

CDT管理构建设置条目,也检查这个。取消另外两个。单击Apply。

回到条目选项卡,GNU c++ CDT管理构建设置条目,您现在应该看到您添加的条目

__GXX_EXPERIMENTAL_CXX0X__

条目。

就是这样。编码时,打字

std::

现在可以自动完成线程类,例如,构建应该工作良好,应该没有

std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted

在运行时。

我在日食朱诺号上也遇到了同样的问题。这些步骤解决了问题:

进入“项目->属性-> C/ c++通用->路径和符号->选项卡[符号]。 添加符号:__cplusplus,值为201103L

对于最新的(Juno) eclipse cdt,以下对我有效,不需要对自己声明__GXX_EXPERIMENTAL_CXX0X__。这适用于CDT索引器和编译器的参数:

“您的项目名称”->右键单击->属性:

C/ c++通用->预处理器包括路径,宏等->切换到名为“提供商”的选项卡:

对于“配置”,选择“发布”(然后选择“调试”) 关闭所有提供程序,选择“CDT GCC内置编译器设置” 取消勾选“项目间共享设置条目(全局提供者)” 在"Command to get compiler specs:" add "-std=c++11"不带引号(也可以使用引号) 点击应用并关闭选项 重新构建索引

现在所有c++11相关的东西都应该被索引器正确地解析了。

Win7 x64,最新的官方eclipse与CDT 来自sourceforge上mingwbuilds项目的Mingw-w64 GCC 4.7.2

我在使用Eclipse c++ 2019-03进行C和c++混合项目时遇到了类似的问题,该项目使用std::optional和std::swap。对我有用的是这个。

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