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停止抱怨这类错误?
当前回答
我也有几个问题(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++编译器->杂项->其他 对于开普勒来说,旗帜还不够,但对于较老的版本,如太阳神,它已经足够了。
右键单击项目,选择“属性” C/ c++ Build -> Settings -> Tool Settings -> GCC c++ Compiler -> Miscellaneous -> Other Flags。将-lm放在其他标志文本框的末尾,然后确定。
我不知道是不是只有我,排名最高的解决方案不适合我,我的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,我不知道为什么这个解决方案工作,希望它能帮助到人们。
要在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。它应该像预期的那样工作。
当使用交叉编译器时,我经常得到同事精心设计的高级自定义构建系统。我使用“现有代码的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子菜单中使用该命令获取解析器日志,可以提供非常丰富的信息。