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停止抱怨这类错误?
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停止抱怨这类错误?
当前回答
右键单击项目,选择“属性” C/ c++ Build -> Settings -> Tool Settings -> GCC c++ Compiler -> Miscellaneous -> Other Flags。将-lm放在其他标志文本框的末尾,然后确定。
其他回答
Eclipse C/ c++不识别符号std::unique_ptr,即使您在文件中包含了c++ 11内存头文件。
假设你正在使用GNU c++编译器,这是我所做的修复:
项目->属性-> C/ c++通用->预处理器包括路径-> GNU c++ -> CDT用户设置条目
点击“Add…”按钮 从下拉菜单中选择“预处理宏” 名称:__cplusplus值:201103L 点击Apply,然后OK回到你的项目 然后重建你的c++索引:Projects -> C/ c++索引->重建
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。
对于最新的(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
当使用交叉编译器时,我经常得到同事精心设计的高级自定义构建系统。我使用“现有代码的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 Neon上遵循了上面的Trismegistos的答案,然而我还添加了一个额外的步骤:
转到项目——>属性——> c++通用——>预处理器包括路径,宏等——>提供者——> CDT跨GCC内置编译器设置,附加标志"-std=c++11"
点击应用并确定。
欢呼,
Guy.