c++eclipse错误错误解释
Posted
技术标签:
【中文标题】c++eclipse错误错误解释【英文标题】:c++ eclipse wrong error interpretation 【发布时间】:2012-07-06 00:57:17 【问题描述】:我在使用 Eclipse C++ 时遇到问题。我的项目编译并运行,但 eclipse (juno) 一直说有数千个错误。例如,我的代码中有一个函数 SetRun,eclipse 提到了这个错误:“调用无效参数 'Candidates are: void SetRun(?)'”,而 SetRun 的类型是 static void SetRun (uint32_t run);
我有很多类似的错误,eclipse似乎不理解函数的类型并放了一个'?而是。
我也有很多这样的错误:“符号'*'无法解析。”
我认为这都是同一个问题的一部分。
我该怎么做才能让 eclipse 停止告诉我这些错误?
【问题讨论】:
常见且烦人的问题。很高兴在 StOv 上解决它。 【参考方案1】:我尝试了建议的解决方案,但它对我不起作用。帮助关闭项目的代码分析。我去了属性-> C/C++ 通用-> 代码分析。选择使用项目设置并关闭所有错误。这当然是非常烦人和不幸的,我很高兴知道它何时得到正确修复。遗憾的是,我们无法使用任何其他体面的 IDE 所具有的功能。
【讨论】:
【参考方案2】:实际上 Eclipse 是某种不稳定的项目。尝试清理并刷新项目。
【讨论】:
我尝试清理和刷新项目,但错误仍然存在。我也重新启动了eclipse。我宁愿尽可能地坚持使用eclipse。 我不这么认为,因为我不知道这意味着什么:)。你是怎么做到的? 索引 - 它是您所有项目代码结构的缓存。 Eclipse 构建它以更快地搜索并在您键入的代码部分显示建议。 在项目上按鼠标右键,然后选择“索引”->“重建” 不,我当时没试过。感谢您的解释。我刚刚做了,但不幸的是它仍然显示不应该出现的错误。哦等等其实它在想,他们都消失了!非常感谢!!【参考方案3】:在 Eclipse 中:
右键项目, 点击属性 “C/C++ 常规”通过单击箭头在左侧树视图中展开项目,(仅单击项目本身不会展开子选项) 从子选项中选择“预处理器包括路径、宏等” 点击标签“Providers”并选中“CDT GCC Built-in Compiler Settings [ Shared ]”旁边的框。【讨论】:
【参考方案4】:我在试图让 CODAN 运行一些用于 Mac 的代码时遇到了很多这样的错误。我的 Mac SDK 库通过符号链接包含在 this question 中(但不是全部 - 请继续关注!)最后,结果证明我没有包含所有标题。例如,我有以下函数调用:
IORegistryEntryGetParentEntry(service, kioservicePlane, &parent);
哪个给出了错误:
Invalid arguments 'Candidates are: ? IORegistryEntryGetParentEntry(?,?,?)'
现在,在IOKit/IOKitLib.h
(我确实有)中定义的函数的正确签名是:
kern_return_t IORegistryEntryGetParentEntry(
io_registry_entry_t entry,
const io_name_t plane,
io_registry_entry_t *parent );
现在,如果我们采用第一个参数并跟踪类型定义,我们会得到:
typedef io_object_t io_registry_entry_t; (in IOKit/IOTypes.h)
typedef mach_port_t io_object_t; (in IOKit/IOTypes.h)
typedef mach_port_name_t mach_port_t; (in mach/port.h)
typedef natural_t mach_port_name_t; (in mach/port.h)
然后!我没有定义__darwin_natural_t
的包含。这个包含实际上在i386
中,而我的符号链接目录中没有它。添加它完成了链:
typedef __darwin_natural_t natural_t; (in i386/vm_types.h)
typedef unsigned int __darwin_natural_t; (in i386/_types.h)
最后,CODAN 知道IORegistryEntryGetParentEntry()
的参数 1 应该是什么类型,错误变为:
Invalid arguments 'Candidates are: kern_return_t IORegistryEntryGetParentEntry(io_registry_entry_t ,?,io_registry_entry_t*)'
我对其他参数重复了这个“类型跟踪”,发现错误消失了(我什至不需要重建索引,但是 YMMV)。当然,您需要找到您需要的标头,并且可以确定 它们 已包含在内 - 以上只是一个示例!
【讨论】:
【参考方案5】:我在一些功能上也遇到了同样的问题。事实证明,在几次 typedef 之后,参数是一个 __int64,它没有定义(不是标准的)。我只需要在我的项目中定义它,这就解决了问题。
Project->Properties->C/C++ General->Paths and Symbols->Symbols->C++ Source File->add
名称:__int64
值:长长
(或者您可以使用this answer 中的值之一来代替“long long”)
编辑:
顺便说一句,我在 Eclipse bugzilla 中看到了关于这个问题的错误报告,所以将来可能不需要定义 __int64
【讨论】:
以上是关于c++eclipse错误错误解释的主要内容,如果未能解决你的问题,请参考以下文章