Eclipse CDT:无法解析符号“ cout”

错误如上。 我应该在Eclipse项目中包含所有必需的文件:

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

等等

我尝试了std::coutiostream cstdlib,但仍然无法解决。

我已导入iostreamcstdlib

另外,我在使用eclipse 3.7.2的Ubuntu 12.04。

程式码片段:

#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;


更新:我已经从现有代码创建了eclipse项目。 创建一个新的c ++项目即可对其进行修复。 我将接受一个答案,该答案解释了现有项目中的哪些设置可能导致此问题(因此,我不必剪切并粘贴所有项目)。

Jeff asked 2019-10-08T03:33:35Z
14个解决方案
92 votes

很可能您的设置中缺少一些特定于系统的包含目录,这使索引器无法正确解析iostream,从而导致错误。 在项目的上下文菜单中选择/usr/include/c++/4.6/x86_64-linux-gnu,将为您提供未解决的包含列表,您可以在bits/c++config.h中进行搜索并将包含目录添加到“项目属性”中的C++ Include Paths and Symbols

在我的系统上,我必须添加/usr/include/c++/4.6/x86_64-linux-gnu才能解决bits/c++config.h以及其他几个目录。

添加包含目录后,不要忘记重建索引(索引->重建)。

vitaut answered 2019-10-08T03:34:01Z
19 votes

为了摆脱不想要的符号警告,首先您应该了解Eclipse CDT通常如何首先产生未知的符号警告。 这是其过程,或多或少:

  1. Eclipse检测到系统上可用的GCC工具链
  2. 您的Eclipse项目已配置为使用特定的工具链
  3. Eclipse确实在工具链上进行发现以找到其包含路径和内置定义,即通过使用相关选项运行它并读取输出
  4. Eclipse从包含路径读取头文件
  5. Eclipse索引项目中的源代码
  6. Eclipse在编辑器中显示有关未解析符号的警告

从长远来看,最好解决早期步骤中的问题,而不是通过手动添加包含目录,符号等来覆盖其结果。

工具链

如果您已安装GCC,并且Eclipse已检测到它,则应将GCC列为新C ++项目可以使用的工具链选择,这还将显示在2559665558262383683616的Per Language17选项卡的2559665558262383683618右侧。 如果未显示,请参阅CDT常见问题解答中有关需要特殊环境的编译器的答案(以及Windows人群的MinGW和Cygwin答案)。

如果您有现有的Eclipse C ++项目,则可以通过打开项目属性并转到Index -> Rebuild并从25596655582623836836下拉列表中选择所需的工具链来更改关联的工具链。 (如果所需的工具链与项目中先前设置的工具链相差太大,则必须首先取消选中2559665558262383683618框。)

如果在启动Eclipse之后将工具链添加到系统中,则需要重新启动它以检测工具链。

发现

然后,如果将项目的2559665558262383683616设置为2559665558262383683617,则在下一个构建期间,与该项目关联的新工具链将用于自动发现包含路径和符号,并将用于更新“内置”路径和符号 会显示在项目2559665558262383683619和2559665558262383683620标签中的2559665558262383683618中。

索引编制

有时,您需要在设置工具链并进行构建以使旧的符号警告消失后再重新索引。 右键单击项目文件夹,然后转到Index -> Rebuild进行操作。

(已在Eclipse 3.7.2 / CDT 8中进行了测试)

rakslice answered 2019-10-08T03:36:17Z
16 votes

感谢负载为上面的答案。 我正在为特定用例添加答案...

在一个具有两个目标体系结构的项目中,每个目标体系结构都有自己的构建配置(主要目标是嵌入式AVR平台;第二个目标是用于运行单元测试的本地Linux PC),我发现有必要设置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,然后重建索引。

Jack Kelly answered 2019-10-08T03:36:53Z
8 votes

我首先在这里尝试了标记的解决方案。 它可以工作,但是有点hacky,并且每次更新gcc时都需要重做。 通过执行以下操作,我终于找到了更好的解决方案:

  1. Index-> Rebuild-> C/C++ General-> Preprocessor Include Paths, Macros, etc.
  2. Index-> Rebuild
  3. 取消选中Index(您也可以根据需要修改全局提供程序)
  4. Index中,在末尾添加Rebuild
  5. Index-> Rebuild

瞧,简单容易。 希望这会有所帮助。

注意:我在开普勒。 我不确定这是否适用于早期的Eclipse。

Andy Shiue answered 2019-10-08T03:38:09Z
4 votes

我正在使用Ubuntu 12.04 / Eclipse 4.2.1 / CDT 8.1.1,并且在相当长的一段时间里曾经遇到过相同的问题:从SVN导入C ++项目会导致这些令人讨厌的“无法解决的包含”错误,而我不得不创建 一个新项目,并在其中复制文件作为解决方法(由于SVN功能不存在,因此仍是部分文件!)。

最后,我找到了一个简单而令人满意的解决方案:

  • 转到Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers,然后检查Enable language settings providers for this project

  • 重新启动Eclipse。

希望那已经成功了。

answered 2019-10-08T03:39:01Z
4 votes

使用MinGW和gcc 4.8.1的Eclipse在* std :: shared_ptr *上遇到了类似的问题。 无论如何,Eclipse都不会解析* shared_ptr *。 为了解决这个问题,我手动将__cplusplus宏添加到C ++符号中,并且-中提琴! -Eclipse可以找到它。 因为我将-std = c ++ 11指定为编译选项,所以我(哼)假定Eclipse代码分析器也将使用该选项。 因此,要解决此问题:

  1. 项目上下文-> C / C ++常规->路径和符号->符号选项卡
  2. 在“语言”面板中选择“ C ++”。
  3. 添加符号__cplusplus,其值为201103。

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

codefool answered 2019-10-08T03:39:58Z
1 votes

对我而言,它有助于启用“属性”->“ C / C ++-Build”->“发现选项”中的自动发现来解决此问题。

WaTho answered 2019-10-08T03:40:28Z
1 votes

我只是删除buttom:问题列表中的所有错误。然后关闭项目并重新打开项目清洁项目全部建立跑

然后那些愚蠢的错误就消失了。

vivi answered 2019-10-08T03:41:04Z
1 votes

如果所有其他方法都失败了(就像我的情况一样),请禁用注释。 我用自己的makefile开始了一个c ++ 11项目,但无法解决所有问题。 即使禁用注释,eclipse仍然可以帮助您进行自动补全。 最重要的是,调试器仍然可以运行!

ormurin answered 2019-10-08T03:41:34Z
1 votes

我在安装2559673160622932932994的Paths and Symbols上使用OK时遇到了相同的问题。 在指向我可以想到的每个Cygwin项目属性之后,仍然找不到cout

最终遗失的部分是OK

总结一下:

  • 右键点击项目
  • 选择OK
  • 导航至OK> Paths and Symbols> Includes选项卡
  • 点击OK
  • 点击OK
  • 浏览到您的Cygwin的位置OK
  • 点击OK

这是我的项目所包含的最终一切都说完之后的样子:enter image description here

user1205577 answered 2019-10-08T03:42:57Z
1 votes

你们正在寻找错误的部分。在最近对Windows感到沮丧之后,当我在Linux中安装时,我意识到了这种区别,并且这种区别立即显而易见。

在新设置中,我有一个投影文件夹,该投影文件夹是根据现有资源创建的。 我可以扩展它并看到大量的包含; 但是,我不能添加它们。这使我开始寻找这些文件的列出位置。

它们在“项目属性”>“ C / C ++常规”>“预处理程序包括”>“ GNU C ++”下列出。CDT GCC内置编译器设置[共享的]在其下是一吨包括。

这些设置由您选择的工具链设置。

Bluebaron answered 2019-10-08T03:43:48Z
1 votes

我已经在Ubuntu 16.04上使用cmake创建了Makefile项目。

为cmake生成的Makefile创建eclipse项目时,我创建了一个新项目,如下所示:

文件->新建->使用现有代码的Makefile项目。

只有经过几次,我才注意到“用于索引器设置的工具链”的默认设置为none。就我而言,我将其更改为Linux GCC,所有错误均消失了。

希望它会有所帮助,让我知道这是否不是一个合法的解决方案。

干杯,

伙计

Guy Avraham answered 2019-10-08T03:44:53Z
0 votes

自己尝试了一堆东西之后又添加了一些建议,但它不起作用。

我已经安装了GCC,并且正确设置了包含路径。 也有std错误,并且无法使cout正常工作(我怀疑SL中有任何东西...)

花了我一段时间才意识到未安装g ++-gcc已安装但未安装g ++。 所以做:

须藤apt-get install g ++

重新开始蚀。 假设上面提到的有关gcc和包含路径的详细信息很好,那么您现在应该可以...

Francky_V answered 2019-10-08T03:45:49Z
0 votes

我在ArchLinux上更新gcc和eclipse之后发生了这种情况。 为我解决的是Project -> C/C++ Index -> Rebuild

DBedrenko answered 2019-10-08T03:46:19Z
translate from https://stackoverflow.com:/questions/10803685/eclipse-cdt-symbol-cout-could-not-be-resolved