Eclipse CDT:Symbol'cout'无法parsing
错误如上。 我有什么应该是所有必要的文件包括在eclipse项目中:
/usr/include/c++/4.6 /usr/include /usr/include/linux /usr/local/include
等等
我试过std::cout
和using namespace std;
但它仍然说没有解决。
我已经导入了iostream
和cstdlib
。
另外,我在Ubuntu 12.04上使用Eclipse 3.7.2。
代码片段:
#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include "XPLMDisplay.h" #include "XPLMGraphics.h" int XPluginStart(char * outName, char * outSig, char * outDesc) { /* ... */ std::cout << "test" << std::endl; /* ... */ }
使用命名空间std;
更新:我已经从现有的代码创build了eclipse项目。 创build一个新的c + +项目修复它。 我会接受一个答案,解释现有项目中的设置可能会导致这种情况(所以我不必剪切和粘贴我的所有项目)。
很可能你的设置中缺less一些特定于系统的包含目录,这使得索引器无法正确parsingiostream,从而导致错误。 在项目的上下文菜单中selectIndex -> Search For Unresolved Includes
,将会给你一个未parsing的包含列表,你可以在/usr/include
search, C++ Include Paths and Symbols
在项目属性中添加包含目录到C++ Include Paths and Symbols
。
在我的系统上,我必须添加/usr/include/c++/4.6/x86_64-linux-gnu
bits/c++config.h
来解决和更多的目录。
不要忘记在添加包含目录后重build索引(索引 – >重build)。
为了摆脱不需要的符号警告,首先您应该了解Eclipse CDT通常首先会如何处理未知的符号警告。 这是它的过程,或多或less:
- Eclipse检测系统上可用的GCC工具链
- 你的Eclipse项目被configuration为使用特定的工具链
- Eclipse在工具链上发现它的包含path和内置定义,即通过运行相关选项并读取输出
- Eclipse从包含path中读取头文件
- Eclipse将您的项目中的源代码编入索引
- Eclipse在编辑器中显示有关未解决符号的警告
从长远来看,解决早期步骤的问题可能会更好,而不是通过手动添加包含目录,符号等来覆盖其结果。
工具链
如果你安装了GCC,并且Eclipse已经检测到它,那么它应该列出GCC作为一个新的C ++项目可以使用的工具链select,这也将在Window -> Preferences -> C/C++ -> New CDT Project Wizard
在右侧的“ Preferred Toolchains
选项卡的“ Toolchains
框中。 如果没有显示,请参阅CDT FAQ关于需要特殊环境的编译器的答案 (以及Windows民间的MinGW和Cygwin答案)。
如果您有一个现有的Eclipse C ++项目,可以通过打开项目属性,然后进入C/C++ Build -> Tool Chain Editor
并从Current toolchain:
下拉菜单中select所需的工具链来更改相关的工具Current toolchain:
。 (如果您需要的工具链与先前在项目中设置的工具链不同,则必须先取消选中“ Display compatible toolchains only
框。)
如果您在启动Eclipse之后向工具链添加了工具链,则需要重新启动才能检测工具链。
发现
然后,如果项目的C/C++ Build -> Discovery Options -> Discovery profiles scope
被设置为按Per Language
,在下一次构build期间,与该项目相关联的新工具链将被用于自动发现包含path和符号,用于更新Includes
和Symbols
选项卡中项目的C/C++ General -> Paths and Symbols
中显示的“内置”path和符号。
索引
有时你需要在设置好工具链之后再重新编制索引,然后进行编译以使旧的符号警告消失。 右键单击项目文件夹,然后进入Index -> Rebuild
来完成。
(用Eclipse 3.7.2 / CDT 8testing)
感谢上面的答案加载。 我正在为一个特定的用例添加一个答案…
在一个有两个目标体系结构的项目中,每个目标体系都有自己的构buildconfiguration(主要目标是embedded式AVR平台;第二个目标是运行unit testing的本地Linux PC)我发现有必要设置Preferences -> C/C++ -> Indexer -> Use active build configuration
Project Properties -> C/C++ General -> Paths and Symbols
Preferences -> C/C++ -> Indexer -> Use active build configuration
以及将/usr/include/c++/4.7
/usr/include
和/usr/include/c++/4.7/x86_64-linux-gnu
到Project Properties -> C/C++ General -> Paths and Symbols
,然后重build索引。
我首先尝试了标记的解决scheme。 它的工作,但它是好心的,你需要重做它,每次你更新gcc。 我终于find了一个更好的解决办法,做到以下几点:
-
Project
– >Properties
– >C/C++ General
– >Preprocessor Include Paths, Macros, etc.
-
Providers
– >CDT GCC built-in compiler settings
- 取消选中
Use global provider shared between projects
的全局提供程序(如果符合您的需要,也可以修改全局提供程序) - 在
Command to get compiler specs
,在末尾添加-std=c++11
-
Index
– >Rebuild
瞧,简单而简单。 希望这有助于。
注:我在开普勒。 我不确定这是否适用于早期的Eclipse。
我使用的是Ubuntu 12.04 / Eclipse 4.2.1 / CDT 8.1.1,我曾经有相同的问题相当长时间:从SVN导入C ++项目会导致这些令人讨厌的“未解决的包含”错误,而我将不得不创build一个新的项目,并在那里复制文件作为解决方法(仍然部分,因为SVNfunction不会在那里!)。
最后,我刚刚find了一个简单而令人满意的解决scheme:
-
转到
Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers
并选中Enable language settings providers for this project
。 -
重新启动Eclipse。
希望已经有这个把戏。
在使用MinGW和gcc 4.8.1的Eclipse中,我使用了* std :: shared_ptr *类似的问题。 无论如何,Eclipse不会parsing* shared_ptr *。 为了解决这个问题,我手动添加了__cplusplusmacros到C ++符号和 – 中提琴! – Eclipse可以find它。 由于我指定了-std = c ++ 11作为编译选项,我(ahem)认为Eclipse代码分析器也会使用该选项。 所以,要解决这个问题:
- 项目上下文 – > C / C ++常规 – >path和符号 – >符号标签
- 在“语言”面板中select“C ++”。
- 添加符号__cplusplus值为201103 。
唯一的问题是gcc会抱怨符号已经被定义(!),但是编译会像以前一样完成。
对我来说,它有助于在属性 – > C / C ++ – 生成 – >发现选项中启用自动发现来解决此问题。
我只是删除了buttom:问题列表中的所有错误。 然后closures项目并重新打开项目清理项目构build全部运行
那么这些愚蠢的错误去。
如果一切都失败了,像我这样做,那么只是禁用注释。 我用自己的makefile启动了一个c ++ 11项目,但是无法解决所有的问题。 即使你禁用了注释,eclipse仍然可以帮助你做一些自动完成。 最重要的是,debugging器仍然工作!
我在Windows
了Cygwin
Windows
上使用Eclipse CDT (Kepler)
时遇到了同样的问题。 在每个Cygwin的指向项目属性后,我可以想到,它仍然无法findcout
。
最后遗漏的部分竟然是C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
。
总结一下:
- 右键点击该项目
- select
Properties
- 导航到
C/C++ General
>Paths and Symbols
>Includes
选项卡 - 点击
Add...
- 点击
File system...
- 浏览到Cygwin
lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
- 点击
OK
这是我的项目包括什么时候看起来像什么时候所有的说话和完成:
你们正在看错误的部分。 当我在最近因为Windows而感到沮丧之后,在Linux中安装时,我意识到了这种差异,并且立即显现出不同之处。
在新的设置中,我有一个包含文件夹的投影,我创build了现有的源。 我可以扩大这个,看到一大堆包括; 但是,我不能添加到他们。 这导致我寻找这些文件被列在哪里。
它们列在项目属性> C / C ++常规>预处理器包含> GNU C ++ CDT GCC内置编译器设置下[共享]下面是一大包括。
这些设置是由您select的工具链设置的。
我已经在Ubuntu 16.04上使用cmake创build了Makefile项目。
当为cmake生成的Makefiles创buildeclipse项目时,我创build了如下的新项目:
文件 – >新build – >使用现有代码的Makefile项目。
只有几次这样做后,我已经注意到“索引设置工具链”的默认设置是没有。 在我的情况下,我已经改变到Linux GCC和所有的错误消失。
希望它可以帮助,让我知道,如果这不是一个合法的解决scheme。
干杯,
盖伊。
在尝试了一堆东西之后,再加上另外一点build议,而这些东西不能正常工作。
我安装了GCC并正确设置了包含的path。 也有std的错误,并不能得到任何工作的cout(我怀疑任何东西在SL …)
花了我一段时间才意识到,g ++没有安装 – gcc是,而不是g ++。 所以只要做:
sudo apt-get安装g ++
重新开启eclipse。 假设上面提到的有关gcc和包含path的细节都很好,现在你应该可以…