我刚刚开始使用Eclipse Indigo(来自Galileo),并且每次使用size_t时,我都会在排水沟中遇到小红虫。
代码编译没有问题,但我怀疑我必须显式添加包含目录的路径。我已经有了通常的嫌疑人。我正在使用Gnu工具链对ColdFire处理器进行交叉编译,所以除了标准包括我在m68k-elf下包含的芯片的mfg
\include
\include\c++\4.2.1
\include\c++\4.2.1\include
\include\c++\4.2.1\m68k-elf
我注意到此工具链中唯一存在的stddef.h位于lib
目录
gcc-m68k\lib\gcc\m68k-elf\4.2.1\include
我在父路径中添加了父路径和\include-fixed
,但问题仍然存在。
当测试什么有效,什么不可用时,我注意到了一些事情
Symbol is not resolved
的代码分析设置不会使错误消失。 Syntax and Semantic Errors
,触发分析,返回并重新打开,然后关闭Symbol is not resolved
可防止错误再次出现。 答案 0 :(得分:3)
检查首选项下的索引器设置 - > C / C ++ - >索引器。
有一个字段叫做“Filed to index up-front”。其内容应为:
cstdarg, stdarg.h, stddef.h, sys/resource.h, ctime, sys/types.h, signal.h, cstdio
如果还有其他内容,请尝试用上面的内容替换它,然后重建索引,看看是否能解决问题。
(特别是,如果你在该字段中拥有的是stdarg.h, stddef.h, sys/types.h
,那么我对错误出错有很好的猜测。回到Eclipse Ganymede,这个字段的值是stdarg.h, stddef.h, sys/types.h
在较新的版本(Galileo和Indigo)中,它已更改为上述内容。但是,由于此字段是“首选项”的一部分,如果您导出Ganymede首选项并将其导入Galileo / Indigo,则此字段将被旧的覆盖Ganymede的价值。我刚才被这个烧了。)
答案 1 :(得分:2)
要确保获得size_t
,您应该#include
标题<cstddef>
;然后,它将是std::size_t
,除非您同时添加using namespace std
或using std::size_t
。
答案 2 :(得分:1)
如果您的工具链只能使用其默认的包含路径和符号来编译代码,那么只需将Eclipse设置为使用它们即可。转到项目属性中的C/C++ Build -> Discovery Options
,对于每种语言,将Compiler invocation command
从本机编译器(例如g++
)更改为交叉编译器(例如,C:\nburn\gcc-m68k\bin\g++
?) 。然后在下一个构建中,自动发现将运行并更新所谓的“内置”路径和符号,这些路径和符号在项目的C/C++ General -> Paths and Symbols
中显示给编译器报告的任何内容,并且您可以再次重新索引确保旧的“内置插件”的任何警告都消失了。
答案 3 :(得分:1)
在遇到这个问题和搜索后发现两个堆栈溢出问题遇到同样的问题时,我想我会提交我如何修复它,因为它让我烦恼到实际调查。
我正在运行Fedora而且很烦人,它在/ usr / include / linux ....中有一个stddef.h文件,实际上是空的。所以即使我在include路径中有编译器的stddef.h,索引器实际上正在解析这个其他空文件。所以需要做的是:
前缀您的路径和符号列表与编译器特定的包含路径(在我的情况下是/usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/)以避免另一个空的stddef.h被解析。
答案 4 :(得分:0)
我实际上遇到了同样的问题。问题似乎与fquinner帖子中描述的问题相同,位于/usr/include/linux/stddef.h
的stddef.h也是空的。奇怪的是,eclipse发现了正确的stddef.h
,甚至可以毫无问题地开启。
如果您只需要像我一样修复eclipse的索引(例如,无论如何使用其他构建工具构建),可以通过将__SIZE_TYPE__
定义为预期类型来解决此索引问题,例如: long unsigned int
下的C/C++ General -> Paths and Symbols
。