c ++ eclipse错误解释错误

时间:2012-07-06 00:57:17

标签: c++ eclipse

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

我有很多类似的错误,其中eclipse似乎不理解函数的类型并放置'?'代替。

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

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

我可以做些什么来让eclipse停止告诉我这些错误?

5 个答案:

答案 0 :(得分:4)

我尝试了所提出的解决方案,它对我不起作用。有助于关闭该项目的CodeAnalysis。我去了Properties-> C / C ++ General->代码分析。选择使用项目设置并关闭所有错误。这当然是非常烦人和不幸的,我很高兴知道它何时被妥善修复。遗憾的是我们无法使用任何其他体面的IDE所具有的功能。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

在Eclipse中:

  • 右键单击项目
  • 点击属性
  • 通过单击arror展开" C / C ++ general" 左侧树视图中的项目(仅点击项目本身不会扩展子选项)
  • 从子选项中选择"预处理器包含路径,宏等。"
  • 点击"供应商" 标签,然后选中" CDT GCC内置编译器设置[共享]"

答案 3 :(得分:0)

我有很多这些错误,试图让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,我在symlink目录中没有。添加它完成了链:

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)。当然,您需要找到所需的标题,并且可能确定包含 - 以上只是一个示例!

答案 4 :(得分:0)

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

项目 - >属性 - > C / C ++一般 - >路径和符号 - >符号 - > C ++源文件 - >添加

name:__ int64

值:长期

(或者代替“long long”也许您可以使用this answer中的一个值

编辑:

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