【问题标题】:c++ eclipse wrong error interpretationc++eclipse错误错误解释
【发布时间】: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 上解决它。

标签: c++ eclipse


【解决方案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

        【讨论】:

          猜你喜欢
          • 2013-06-22
          • 1970-01-01
          • 2014-03-28
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 2011-08-01
          • 2023-03-27
          • 2011-12-22
          相关资源
          最近更新 更多