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停止抱怨这类错误?
当前回答
对于我来说,我在Eclipse Neon上遵循了上面的Trismegistos的答案,然而我还添加了一个额外的步骤:
转到项目——>属性——> c++通用——>预处理器包括路径,宏等——>提供者——> CDT跨GCC内置编译器设置,附加标志"-std=c++11"
点击应用并确定。
欢呼,
Guy.
其他回答
对于最新的(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
我也有几个问题(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
在运行时。
对于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 Neon上遵循了上面的Trismegistos的答案,然而我还添加了一个额外的步骤:
转到项目——>属性——> c++通用——>预处理器包括路径,宏等——>提供者——> CDT跨GCC内置编译器设置,附加标志"-std=c++11"
点击应用并确定。
欢呼,
Guy.
我不知道是不是只有我,排名最高的解决方案不适合我,我的eclipse版本只是在Ubuntu中使用sudo apt-get install eclipse安装的普通eclipse平台 但是我发现了一个解决方案,它采用了从排名最高的解决方案和第二个解决方案一起的方法,我所做的工作如下所述(注意,为了简单起见,其他步骤如创建c++项目等被忽略)
创建了c++项目之后
(1) C/ c++通用->路径和符号->符号-> GNU c++。点击“Add…”,将GXX_EXPERIMENTAL_CXX0X(确保在“Name”中添加和前置两个下划线)粘贴到“Name”中,“Value”为空。
(2)在C/ c++ Build(在项目设置中)下,找到Preprocessor Include路径并进入Providers选项卡。取消选择除CDT GCC内置编译器设置外的所有设置。然后取消标记共享设置条目... .在名为Command的文本框中添加选项-std=c++11以获取编译器规格
在执行以上2和2个步骤后,它工作了,eclipse能够解决unique_ptr,我不知道为什么这个解决方案工作,希望它能帮助到人们。