Eclipse CDT:无法解析符号'cout'

时间:2012-05-29 17:10:40

标签: c++ eclipse include eclipse-cdt include-path

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

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

等。

我尝试了std::coutusing namespace std; cout,但仍然没有解决。

我已导入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;
    /* ... */
}

使用namespace std;


更新:我从现有代码创建了eclipse项目。创建一个新的c ++项目可以修复它。我会接受一个解释,解释现有项目中的设置可能导致这种情况(因此我不必剪切和粘贴所有项目)。

15 个答案:

答案 0 :(得分:92)

您的设置中很可能缺少一些特定于系统的包含目录,这使得索引器无法正确解析iostream,从而导致错误。在项目的上下文菜单中选择Index -> Search For Unresolved Includes将为您提供未解决的包含列表,您可以在/usr/include中搜索并在项目属性中将包含的目录添加到C++ Include Paths and Symbols

在我的系统上,我必须为要解析的/usr/include/c++/4.6/x86_64-linux-gnu添加bits/c++config.h以及更多目录。

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

答案 1 :(得分:19)

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

  1. Eclipse检测到系统上可用的GCC工具链
  2. 您的Eclipse项目配置为使用特定的工具链
  3. Eclipse在工具链上进行发现以查找其包含路径和内置定义,即通过运行相关选项并读取输出
  4. Eclipse从包含路径中读取头文件
  5. Eclipse索引项目中的源代码
  6. Eclipse在编辑器中显示有关未解析符号的警告
  7. 从长远来看,修复前面步骤的问题可能会更好,而不是通过手动添加包含目录,符号等来覆盖其结果。

    <强>工具链

    如果你安装了GCC,并且Eclipse已经检测到它,它应该将GCC列为新C ++项目可以使用的工具链选择,这也将显示在Window -> Preferences -> C/C++ -> New CDT Project Wizard Preferred Toolchains上标签右侧的Toolchains框。如果它没有显示,请参阅the CDT FAQ's answer about compilers that need special environments(以及Windows用户的MinGWCygwin个答案。)

    如果您有一个现有的Eclipse C ++项目,则可以通过打开项目属性来更改关联的工具链,然后转到C/C++ Build -> Tool Chain Editor并从Current toolchain:下拉菜单中选择所需的工具链。 (如果您想要的工具链与之前在项目中设置的工具链不同,则必须先取消选中Display compatible toolchains only框。)

    如果在启动Eclipse后向系统添加了工具链,则需要重新启动它才能检测到工具链。

    <强>发现

    然后,如果项目的C/C++ Build -> Discovery Options -> Discovery profiles scope设置为Per Language,则在下一次构建期间,与项目关联的新工具链将用于自动发现包含路径和符号,并将使用更新C/C++ General -> Paths and SymbolsIncludes标签中项目Symbols中显示的“内置”路径和符号。

    <强>索引

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

    (使用Eclipse 3.7.2 / CDT 8测试)

答案 2 :(得分:16)

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

在一个具有两个目标体系结构的项目中,每个体系结构都有自己的构建配置(主要目标是嵌入式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-gnu添加到Project Properties -> C/C++ General -> Paths and Symbols,然后重建索引。

答案 3 :(得分:8)

我首先尝试了标记的解决方案。它工作但它很善良,每次更新gcc时都需要重做它。通过以下方式我终于找到了更好的解决方案:

  1. Project - &gt; Properties - &gt; C/C++ General - &gt; Preprocessor Include Paths, Macros, etc.
  2. Providers - &gt; CDT GCC built-in compiler settings
  3. 取消选中Use global provider shared between projects(如果符合您的需要,您也可以修改全局提供商)
  4. Command to get compiler specs中,在末尾添加-std=c++11
  5. Index - &GT; Rebuild
  6. Voila,简单易行。希望这会有所帮助。

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

答案 4 :(得分:4)

我正在使用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。

希望这已经成功了。

答案 5 :(得分:4)

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

  1. 项目背景 - &gt; C / C ++一般 - &gt;路径和符号 - &gt;符号选项卡
  2. 在“语言”面板中选择“C ++”。
  3. 使用值 201103 添加符号 __ cplusplus
  4. 唯一的问题是gcc会抱怨已经定义了符号(!),但编译将像以前一样完成。

答案 6 :(得分:1)

对我而言,它有助于在属性中启用自动发现 - &gt; C / C ++ - 构建 - &gt;发现选项可解决此问题。

答案 7 :(得分:1)

我只是删除了buttom:问题列表中的所有错误。 然后关闭项目 并重新开放项目 干净的项目 建立所有 运行

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

答案 8 :(得分:1)

如果所有其他方法都失败了,就像在我的情况下那样,那么只需禁用注释。我用自己的makefile启动了一个c ++ 11项目,但无法解决所有问题。即使你禁用注释,eclipse仍然可以帮助你做一些自动完成。最重要的是,调试器仍然有效!

答案 9 :(得分:1)

我在安装了Eclipse CDT (Kepler)的{​​{1}}上使用Windows时遇到了同样的问题。在我想到的每个Cygwin包含项目属性之后,它仍然无法找到Cygwin

最后遗失的部分原来是cout

总结一下:

  • 右键单击项目
  • 选择C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
  • 导航至Properties&gt; C/C++ General&gt; Paths and Symbols标签
  • 点击Includes
  • 点击Add...
  • 浏览到您的Cygwin File system...
  • 的位置
  • 点击lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include

这是我的项目所包含的内容,最终看起来就像是说完了所有内容: enter image description here

答案 10 :(得分:1)

你们正在寻找错误的部分。 我在最近对Windows感到沮丧之后在Linux上安装时意识到了不同之处,差异很明显。

在新设置中,我在一个我用现有源创建的投影中有一个包含文件夹。我可以扩展这个并看到大量的包括;但是,我无法添加它们。 这导致我去寻找列出这些文件的位置。

它们列在项目属性&gt;下C / C ++一般&gt;预处理器包括&gt; GNU C ++ CDT GCC内置编译器设置[共享] 在那之下是大量的包括。

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

答案 11 :(得分:1)

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

当创建了生成cmake的Makefile的eclipse项目时,我创建了这样的新项目:

档案 - &gt;新的 - &gt;使用现有代码的Makefile项目。

只有经过几次这样做,我才注意到&#34;工具链的默认设置为索引器设置&#34;没有。 在我的情况下,我已将其更改为Linux GCC,所有错误都消失了。

希望它有所帮助,如果它不是一个合法的解决方案,请告诉我。

干杯,

盖。

答案 12 :(得分:0)

在自己尝试了一堆东西之后再添加一些建议,它就不起作用......

我安装了GCC,并正确设置了包含路径。还有std错误,并且无法为cout工作(我怀疑SL中的任何内容......)

我花了一些时间意识到g ++没有安装 - gcc不是g ++。所以就这样做:

sudo apt-get install g ++

重启eclipse。假设上面提到的有关gcc&amp; amp;包含的路径很好,你现在应该没事......

答案 13 :(得分:0)

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

答案 14 :(得分:0)

我的问题很容易找出右键单击>运行方式>运行配置

复选框包括系统库,继承的电源