10

我在使用 Eclipse C++ 时遇到问题。我的项目编译并运行,但 eclipse (juno) 一直说有数千个错误。例如,我的代码中有一个函数 SetRun,eclipse 提到了这个错误:“调用无效参数'候选者是:void SetRun(?)'”,而 SetRun 的类型是 static void SetRun (uint32_t run);

我有很多类似的错误,其中eclipse似乎不理解函数的类型并放了一个'?反而。

我也有很多这样的错误:“符号'*'无法解析。”

我认为这都是同一个问题的一部分。

我该怎么做才能让 eclipse 停止告诉我这些错误?

4

5 回答 5

6

我尝试了建议的解决方案,但它对我不起作用。帮助关闭项目的代码分析。我去了属性-> C/C++ 通用-> 代码分析。选择使用项目设置并关闭所有错误。这当然是非常烦人和不幸的,我很高兴知道它何时得到正确修复。遗憾的是,我们无法使用任何其他体面的 IDE 所具有的功能。

于 2012-11-29T07:51:01.443 回答
3

实际上 Eclipse 是某种不稳定的项目。尝试清理和刷新项目。

于 2012-07-06T01:08:32.487 回答
2

在 Eclipse 中:

  • 右键项目,
  • 点击属性
  • 通过单击箭头在左侧树视图中展开“C/C++ 常规”项目,(仅单击项目本身不会展开子选项)
  • 从子选项中选择“预处理器包括路径、宏等”。
  • 单击选项卡“Providers”并选中“CDT GCC Built-in Compiler Settings [Shared]”旁边的框。
于 2014-06-18T16:37:36.827 回答
1

在试图让 CODAN 运行一些用于 Mac 的代码时,我遇到了很多这样的错误。我的 Mac SDK 库是通过符号链接包含在这个问题中的(但不是全部 - 请继续关注!)最后,结果证明我没有包含所有标题。例如,我有以下函数调用:

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 知道参数 1IORegistryEntryGetParentEntry()应该是什么类型,错误变为:

Invalid arguments 'Candidates are: kern_return_t IORegistryEntryGetParentEntry(io_registry_entry_t ,?,io_registry_entry_t*)'

我对其他参数重复了这个“类型跟踪”,发现错误消失了(我什至不需要重建索引,但是 YMMV)。当然,您需要找到您需要的标头,并确保它们已包含在内 - 以上只是一个示例!

于 2013-10-25T17:32:37.347 回答
1

我在一些功能上也遇到了同样的问题。事实证明,在几次 typedef 之后,参数是一个 __int64,它没有定义(不是标准的)。我只需要在我的项目中定义它,这就解决了问题。

Project->Properties->C/C++ General->Paths and Symbols->Symbols->C++ Source File->add

名称:__int64

值:长长

(或者代替“long long”也许你可以使用这个答案中的一个值)

编辑:

顺便说一句,我在 Eclipse bugzilla 中看到了关于这个问题的错误报告,所以将来可能不需要定义 __int64

于 2013-10-30T15:24:15.087 回答