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错误错误解释的主要内容,如果未能解决你的问题,请参考以下文章

C ++ / Eclipse中的未定义符号错误[关闭]

eclipse中启动tomcat错误

eclipse启动时发生错误,各位大大看看怎么解决

Eclipse C/C++“权限被拒绝”错误

eclipse js文件无法保存错误

eclipse中启动Genymotion模拟器的错误