c++ - Eclipse CDT:无法解析符号'cout'




include eclipse-cdt (10)

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

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

它们列在项目属性> C / C ++通用>预处理器包含> GNU C ++ CDT GCC内置编译器设置[共享]下,这是很多包含。

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

错误如上所述。 我有什么应该是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;
    /* ... */
}

使用命名空间std;

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


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

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

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

sudo apt-get install g ++

重启eclipse。 假设上面提到的关于gcc和包含路径的细节很好,你现在应该没问题......


对我来说,它有助于在Properties - > C / C ++ - Build - > Discovery Options中启用自动发现来解决此问题。


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

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

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


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

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

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


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

然后是那些愚蠢的错误。


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


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

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

文件 - >新建 - >包含现有代码的Makefile项目。

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

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

干杯,

盖伊。


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

  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。


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

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

从长远来看,修复前面步骤的问题可能会更好,而不是通过手动添加包含目录,符号等来覆盖其结果。

工具链

如果您安装了GCC,并且Eclipse已经检测到它,它应该将GCC列为新C ++项目可以使用的工具链选项,这也将显示在Window -> Preferences -> C/C++ -> New CDT Project WizardPreferred Toolchains选项卡右侧的Toolchains框中。 如果它没有显示,请参阅CDT FAQ关于需要特殊环境的编译器的答案 (以及Windows民众的MinGWCygwin答案。)

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

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

发现

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

索引

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

(使用Eclipse 3.7.2 / CDT 8测试)





include-path