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


当前回答

2016年更新:

从gcc 6开始(更改),默认的c++方言是c++ 14。这意味着,除非您明确地需要比than更新或更老的方言,否则您不需要再使用eclipse做任何事情了。

月球和火星

这个社区wiki部分包含了Trismegistos的答案;

1. 在创建项目之前,配置Eclipse语法解析器:

窗口->首选项-> C/ c++ ->构建->设置->发现-> CDT GCC内置编译器设置

在标题为“命令获取编译器规格”的文本框中添加-std=c++14 2. 创建项目,配置取决于你创建的项目类型:

对于创建为:File -> New -> project -> C/ c++ -> c++ project

右键单击创建的项目并打开

属性-> C/ c++构建->设置->工具设置-> GCC c++编译器->方言

将-std=c++14放入标题为“其他方言标志”的文本框中,或从“语言标准”下拉菜单中选择“ISO c++ 11”。

现在有一种新的方法来解决这个问题,而不需要GXX_EXPERIMENTAL黑客。

对于最新版本:(目前是朱诺和开普勒Luna):

在Juno的新版本下,设置位于项目属性-> C/ c++通用->预处理器包括路径,宏等->选项卡提供程序-> CDT GCC内置编译器设置()。

旧版本2012/2013:

在C/ c++ Build (at project settings)下,找到Preprocessor Include Path,然后转到Providers选项卡。取消选择除CDT GCC内置编译器设置外的所有设置。然后取消标记共享设置条目... .在名为Command的文本框中添加选项-std=c++11以获取编译器规格。 选择路径和符号。在符号下,单击恢复默认值,然后应用。


注:

Eclipse对点击apply很挑剔,每次离开设置选项卡时都需要这样做。

【自我推广】:在以上的基础上,我自己写了更详细的说明。 http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

感谢https://stackoverflow.com/a/13635080/1149664的用户Nobody

其他回答

对于Eclipse CDT Kepler,我摆脱std::线程未解析符号的工作是:

进入“首选项->C/ c++ ->构建->设置” 选择Discovery选项卡 选择CDT GCC内置编译器设置[共享] 在“Command to get compiler specs:”字段中添加-std=c++11,例如:

${COMMAND} -E -P -v -dD -std=c++11 ${输入}

好的,然后重建项目的索引。

添加-std=c++11到项目属性/ c / c++构建->设置->工具设置->GCC c++编译器->杂项->其他 对于开普勒来说,旗帜还不够,但对于较老的版本,如太阳神,它已经足够了。

我在Eclipse论坛上找到了这篇文章,只需要按照这些步骤,它就适合我了。我在Windows上使用Cygwin设置的Eclipse Indigo 20110615-0604。

Make a new C++ project Default options for everything Once created, right-click the project and go to "Properties" C/C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Miscellaneous -> Other Flags. Put -std=c++0x (or for newer compiler version -std=c++11 at the end . ... instead of GCC C++ Compiler I have also Cygwin compiler C/C++ General -> Paths and Symbols -> Symbols -> GNU C++. Click "Add..." and paste __GXX_EXPERIMENTAL_CXX0X__ (ensure to append and prepend two underscores) into "Name" and leave "Value" blank. Hit Apply, do whatever it asks you to do, then hit OK.

现在在Eclipse FAQ/ c++ 11 Features中也有关于这方面的描述。

Eclipse设置

Eclipse CDT 4.4 Luna和4.5 Mars的说明

首先,在创建项目之前,配置Eclipse语法解析器:

窗口->首选项-> C/ c++ ->构建->设置->发现-> CDT GCC内置编译器设置

在标题为“命令获取编译器规格”的文本框中添加-std=c++11

现在你可以创建项目,配置取决于你创建的项目类型:

对于创建为:File -> New -> project -> C/ c++ -> c++ project

右键单击创建的项目并打开

属性-> C/ c++构建->设置->工具设置-> GCC c++编译器->方言

将-std=c++11放入标题为“其他方言标志”的文本框中,或从“语言标准”下拉菜单中选择“ISO c++11”。

对于CMake项目

生成eclipse项目文件(在项目内部)

mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..

然后将生成的目录作为标准eclipse项目导入eclipse。右键单击项目并打开

属性-> C/ c++通用->预处理器包括路径,Marcos等->提供程序

启用CDT GCC内置编译器设置,并将其移动到贡献路径入口容器之上(这很重要)

最后常用步骤

重新编译,重新生成Project ->C/ c++索引并重新启动Eclipse。

2016年更新:

从gcc 6开始(更改),默认的c++方言是c++ 14。这意味着,除非您明确地需要比than更新或更老的方言,否则您不需要再使用eclipse做任何事情了。

月球和火星

这个社区wiki部分包含了Trismegistos的答案;

1. 在创建项目之前,配置Eclipse语法解析器:

窗口->首选项-> C/ c++ ->构建->设置->发现-> CDT GCC内置编译器设置

在标题为“命令获取编译器规格”的文本框中添加-std=c++14 2. 创建项目,配置取决于你创建的项目类型:

对于创建为:File -> New -> project -> C/ c++ -> c++ project

右键单击创建的项目并打开

属性-> C/ c++构建->设置->工具设置-> GCC c++编译器->方言

将-std=c++14放入标题为“其他方言标志”的文本框中,或从“语言标准”下拉菜单中选择“ISO c++ 11”。

现在有一种新的方法来解决这个问题,而不需要GXX_EXPERIMENTAL黑客。

对于最新版本:(目前是朱诺和开普勒Luna):

在Juno的新版本下,设置位于项目属性-> C/ c++通用->预处理器包括路径,宏等->选项卡提供程序-> CDT GCC内置编译器设置()。

旧版本2012/2013:

在C/ c++ Build (at project settings)下,找到Preprocessor Include Path,然后转到Providers选项卡。取消选择除CDT GCC内置编译器设置外的所有设置。然后取消标记共享设置条目... .在名为Command的文本框中添加选项-std=c++11以获取编译器规格。 选择路径和符号。在符号下,单击恢复默认值,然后应用。


注:

Eclipse对点击apply很挑剔,每次离开设置选项卡时都需要这样做。

【自我推广】:在以上的基础上,我自己写了更详细的说明。 http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

感谢https://stackoverflow.com/a/13635080/1149664的用户Nobody

要在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。它应该像预期的那样工作。