【问题标题】:Eclipse 3.7 cannot resolve Types in C++ EditorEclipse 3.7 无法解析 C++ 编辑器中的类型
【发布时间】:2012-07-09 21:58:36
【问题描述】:

我最近从 Eclipse 3.6 更改为 Eclipse 3.7 ,我在 Ubuntu 11.04 中用于 C++ 开发。

在 3.6 版中,我没有遇到什么大问题,只是索引器总是有一些问题。 现在在 3.7 版中,它开始将未解决的类型标记为错误。由于索引器似乎更不喜欢我,我的 Eclipse 显然不知道像 uint16_tsize_t 这样的类型。

与代码编辑器中显示的错误相反,我的编译器在编译代码和解析所有符号和类型方面没有问题,所以这似乎是 IDE 本身的问题。

有什么办法可以避免这种行为,因为所有的红色下划线让我的代码越来越不可读......?

更新:

好的,通过一些研究和丹尼斯的回答我发现我需要添加一些路径 Project Properties/ C/C++ General/ Paths and Symbols

由于我正在为 PowerPC 而不是 I32 目标构建,我不能只添加 /usr/include 。 相反,我需要添加

/usr/powerpc-linux-gnu/libc/usr/include

适用于所有标准标题(如stdint.h)。 我还需要:

/usr/lib/gcc/powerpc-linux-gnu/4.5.1/include

stdarg.h

现在几乎所有的错误都消失了。唯一仍然困扰我的功能是标题stdio.h 中的printf。我查了一下,头文件本身位于包含的路径中。我仍然收到一个错误,上面写着Function printf could not be resolved。我想再次指出,这些只是 Eclipse 显示的错误 - 编译本身工作正常。

所以这实际上引发了 3 个问题:

  1. 在项目属性中,Paths and Symbols 部分与 C++ Build/Settings/C++ Includes 部分中的包含路径相一致。这意味着在其中一个部分中添加/删除路径会直接影响其他部分的条目。由于C++ Includes 直接与编译器相一致,我想知道为什么编译器可以正确编译(并找到标头),即使它们没有作为路径传递给他?是否有某种我不知道的 GCC 使用的标准路径?

  2. 为什么他在eclipse中找不到printf?包含头文件stdio.h,它还包含printf 的声明——那么为什么Eclipse 代码编辑器告诉我它无法解决它?

  3. 为什么头文件分得这么多?我知道如果我正在为另一个 traget(例如 PowerPC)构建我需要其他头文件 - 但是为什么 GNU GCC 将这些头文件分隔在不同的目录中?

【问题讨论】:

    标签: c++ eclipse ide indexer


    【解决方案1】:

    我正在使用带有 ARM 编译器(arm-none-eabi,4.4.1)的 Eclipse(Mars.1 Release 4.5.1,Build id:20150924-1200)。 我和你有完全一样的问题。 我以前的路径是:

    D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include
    

    然后我在编译器目录中发现了另一个包含目录(后缀:'fixed'):

    D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include-fixed
    

    这解决了我关于类型错误检测的所有错误(例如 uint16_t)。

    【讨论】:

      【解决方案2】:

      在遇到这个问题并且搜索显示两个堆栈溢出问题遇到相同的问题后,我想我会提交我如何解决它,因为它让我非常恼火以至于需要进行实际调查。

      我正在运行 Fedora,令人讨厌的是,它在 /usr/include/linux.... 中有一个 stddef.h 文件,它实际上是空的。因此,即使我在包含路径中有编译器的 stddef.h,索引器实际上也在解析另一个空文件。所以需要做的是:

      前缀您的路径和符号列表与编译器特定的包含路径(在我的情况下是 /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/)以避免另一个空的 stddef.h 被解析。

      【讨论】:

      • 前缀很重要。我有 /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/ 但它位于底部,无法向上移动。我不得不添加另一个条目并将其移动到顶部以使其工作。显然列表中的其他目录有一个错误的版本,这把事情搞砸了。
      【解决方案3】:

      常见类型的红色下划线通常是由于您的包含路径中没有您的标准库。查看项目的包含...它们在项目属性中。确保您的 C++ 包含的条目与您正在使用的编译器的 C++ 标准库文件夹相匹配。

      【讨论】:

      • 我正在使用 powerpc-linux-gnu-g++ 编译器。在我的 C++ 构建设置中,我还配置了相应的包含路径 (/usr/powerpc-linux-gnu/include/c++/4.5.1)。这条路径我也添加到项目包含路径中......不幸的是没有任何变化......
      • size_t<cstddef> 等中定义。如果你#include 它在你的文件中,看看它是否使红线消失。如果没有,请查看#include <cstddef> 是否带有黄线下划线。如果是这样,将鼠标悬停在它上面,并且如果它说它找不到它,那么你的包含设置有问题。还可以尝试为您的项目重新构建索引。
      • 嗨丹尼斯,感谢您的输入 - 我刚刚更新了这个问题。也许你可以进一步帮助我。
      • 您的问题听起来非常具体到我不熟悉的目标平台......对不起。很高兴您发现这些建议很有帮助
      猜你喜欢
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 2023-03-26
      • 1970-01-01
      • 2012-05-27
      相关资源
      最近更新 更多