我最近从Eclipse 3.6更改为Eclipse 3.7,我在Ubuntu 11.04中用于C ++开发。
使用3.6版本,我没有遇到大麻烦,只是我总是在索引器上遇到一些问题。
现在使用版本3.7,它开始将未解决的类型标记为错误。由于索引器似乎更不喜欢我,我的Eclipse显然不知道像uint16_t
或size_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
。
现在几乎所有的错误都消失了。唯一仍然困扰我的功能是标题printf
中的stdio.h
。我查了一下,头文件本身位于包含的路径中。我仍然得到一个错误Function printf could not be resolved
。我想再次注意,这些只是Eclipse显示的错误 - 编译本身工作正常。
所以这实际上引发了3个问题:
在项目属性中,Paths and Symbols
部分与C++ Build/Settings/C++ Includes
部分中的包含路径一致。这意味着在其中一个部分中添加/删除路径会直接影响其他部分的输入。由于C++ Includes
直接与编译器一致,我想知道为什么编译器可以编译正确(并找到标题),即使它们没有作为路径传递给他?是否有某种标准路径GCC使用,我不知道?
他为什么不在日食中找到printf
?包含头文件stdio.h
,它还包含printf
的声明 - 那么为什么Eclipse代码编辑器告诉我它无法解决它?
为什么头文件划分如此之多?我知道我需要其他头文件,如果我正在构建另一个traget(例如PowerPC) - 但为什么GNU GCC将这些头分开在不同的目录中?
答案 0 :(得分:3)
常见类型的红色下划线通常是由于您的包含路径中没有标准库。查看项目的包含...它们位于项目属性中。确保您的C ++包含的条目与您正在使用的编译器的C ++标准库文件夹相匹配。
答案 1 :(得分:3)
在遇到这个问题和搜索后发现两个堆栈溢出问题遇到同样的问题时,我想我会提交我如何修复它,因为它让我烦恼到实际调查。
我正在运行Fedora而且很烦人,它在/ usr / include / linux ....中有一个stddef.h文件,实际上是空的。所以即使我在include路径中有编译器的stddef.h,索引器实际上正在解析这个其他空文件。所以需要做的是:
前缀您的路径和符号列表与编译器特定的包含路径(在我的情况下是/usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/)以避免另一个空的stddef.h被解析。
答案 2 :(得分:0)
我使用Eclipse(Mars.1 Release 4.5.1,Build id:20150924-1200)和ARM编译器(arm-none-eabi,4.4.1)。 我和你有完全相同的问题。 我以前的道路是:
password_hash()
然后我在编译器目录中发现了另一个包含目录(后缀:' fixed'):
D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include
这解决了我所有关于类型错误检测的错误(例如uint16_t)。