62

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

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

等等

我试过了std::coutusing namespace std; cout但它仍然说未解决。

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

使用命名空间标准;


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

4

15 回答 15

94

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

在我的系统上,我必须添加/usr/include/c++/4.6/x86_64-linux-gnubits/c++config.h解决的目录和更多目录。

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

于 2012-05-29T17:39:40.310 回答
24

要摆脱您不想要的符号警告,首先您应该首先了解 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 常见问题解答关于需要特殊环境的编译器的答案(以及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 测试)

于 2012-11-23T07:06:02.667 回答
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-gnuProject Properties -> C/C++ General -> Paths and Symbols

于 2012-10-18T09:50:31.047 回答
8

我首先在这里尝试了标记的解决方案。它有效,但它有点老套,每次更新 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。

于 2014-02-27T20:41:01.993 回答
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。

希望这已经成功了。

于 2013-01-21T01:06:23.960 回答
4

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

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

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

于 2014-01-13T15:52:56.453 回答
1

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

于 2012-08-15T13:14:58.040 回答
1

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

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

于 2013-05-05T12:08:00.600 回答
1

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

于 2013-10-31T08:49:08.143 回答
1

Eclipse CDT (Kepler)我在Windows使用安装时遇到了同样的问题Cygwin。将项目属性指向我能想到的每个 Cygwin 包括后,它仍然找不到cout.

最后缺失的部分原来是C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include.

总结一下:

  • 右键单击项目
  • 选择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

这是我的项目包含的内容,当一切都说完并完成时: 在此处输入图像描述

于 2014-05-04T12:21:08.283 回答
1

你们在看错误的部分。最近对 Windows 感到沮丧后,当我在 Linux 中安装时,我意识到了差异,并且差异立即显现出来。

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

它们列在 Project Properties > C/C++ General > Preprocessor Includes > GNU C++ CDT GCC Built-in Compiler Settings [Shared] 下面是大量的包含。

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

于 2014-09-16T02:29:42.943 回答
1

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

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

文件 --> 新 --> 带有现有代码的 Makefile 项目。

只有在这样做了几次之后,我才注意到“用于索引器设置的工具链”的默认设置为无。就我而言,我已将其更改为 Linux GCC,所有错误都消失了。

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

干杯,

家伙。

于 2017-09-21T22:31:37.247 回答
1

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

于 2018-04-16T17:53:00.960 回答
0

在我自己尝试了一堆东西之后又添加了一点建议,但它不起作用....

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

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

sudo apt-get install g++

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

于 2017-10-27T01:51:05.493 回答
0

我的有点容易弄清楚 右键单击>运行方式>运行配置

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

于 2019-08-19T22:26:24.693 回答