Eclipse CDT:Symbol'cout'无法parsing

错误如上。 我有什么应该是所有必要的文件包括在eclipse项目中:

/usr/include/c++/4.6 /usr/include /usr/include/linux /usr/local/include 

等等

我试过std::coutusing namespace std; 但它仍然说没有解决。

我已经导入了iostreamcstdlib

另外,我在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/includesearch, 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:

  1. Eclipse检测系统上可用的GCC工具链
  2. 你的Eclipse项目被configuration为使用特定的工具链
  3. Eclipse在工具链上发现它的包含path和内置定义,即通过运行相关选项并读取输出
  4. Eclipse从包含path中读取头文件
  5. Eclipse将您的项目中的源代码编入索引
  6. 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和符号,用于更新IncludesSymbols选项卡中项目的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-gnuProject Properties -> C/C++ General -> Paths and Symbols ,然后重build索引。

我首先尝试了标记的解决scheme。 它的工作,但它是好心的,你需要重做它,每次你更新gcc。 我终于find了一个更好的解决办法,做到以下几点:

  1. Project – > Properties – > C/C++ General – > Preprocessor Include Paths, Macros, etc.
  2. Providers – > CDT GCC built-in compiler settings
  3. 取消选中Use global provider shared between projects的全局提供程序(如果符合您的需要,也可以修改全局提供程序)
  4. Command to get compiler specs ,在末尾添加-std=c++11
  5. 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代码分析器也会使用该选项。 所以,要解决这个问题:

  1. 项目上下文 – > C / C ++常规 – >path和符号 – >符号标签
  2. 在“语言”面板中select“C ++”。
  3. 添加符号__cplusplus值为201103

唯一的问题是gcc会抱怨符号已经被定义(!),但是编译会像以前一样完成。

对我来说,它有助于在属性 – > C / C ++ – 生成 – >发现选项中启用自动发现来解决此问题。

我只是删除了buttom:问题列表中的所有错误。 然后closures项目并重新打开项目清理项目构build全部运行

那么这些愚蠢的错误去。

如果一切都失败了,像我这样做,那么只是禁用注释。 我用自己的makefile启动了一个c ++ 11项目,但是无法解决所有的问题。 即使你禁用了注释,eclipse仍然可以帮助你做一些自动完成。 最重要的是,debugging器仍然工作!

我在WindowsCygwin Windows上使用Eclipse CDT (Kepler)时遇到了同样的问题。 在每个Cygwin的指向项目属性后,我可以想到,它仍然无法findcout

最后遗漏的部分竟然是C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include

总结一下:

  • 右键点击该项目
  • selectProperties
  • 导航到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的细节都很好,现在你应该可以…