错误:' - >'的无效类型参数(有'int')

时间:2014-02-08 09:12:05

标签: c++ c binutils

我正在尝试构建一个旧的binutils(2.13)。收到错误./config/obj-elf.c:364:错误:下一行的' - >'(包含'int')的无效类型参数:

if (symbol_get_obj (symbolP)->local)
{...

函数symbol_get_obj:

OBJ_SYMFIELD_TYPE *
symbol_get_obj (s)
     symbolS *s;
{
  if (LOCAL_SYMBOL_CHECK (s))
    s = local_symbol_convert ((struct local_symbol *) s);
  return &s->sy_obj;
}

OBJ_SYMFIELD_TYPE定义为:

#define OBJ_SYMFIELD_TYPE struct elf_obj_sy

和elf_obj_sy是

struct elf_obj_sy
{
  /* Whether the symbol has been marked as local.  */
  int local;

  /* Use this to keep track of .size expressions that involve
     differences that we can't compute yet.  */
  expressionS *size;

  /* The name specified by the .symver directive.  */
  char *versioned_name;

#ifdef ECOFF_DEBUGGING
  /* If we are generating ECOFF debugging information, we need some
     additional fields for each symbol.  */
  struct efdr *ecoff_file;
  struct localsym *ecoff_symbol;
  valueT ecoff_extern_size;
#endif
};

无法理解这段代码有什么问题...有什么建议吗?

2 个答案:

答案 0 :(得分:4)

基于错误消息,一个可能的原因是函数symbol_get_obj的声明无法在之前出现在您调用它的位置,这使得返回值默认为{ {1}},运算符int的无效类型。你可能想检查一下。通过头文件包含或显式函数原型确保->声明的正确存在。

答案 1 :(得分:2)

invalid type argument of ‘->’ (have ‘int’)

只有

才有意义
symbol_get_obj(symbolP)

返回int。它没有。

因此,唯一合乎逻辑的结论是symbol_get_obj尚未在错误发生的代码中声明。在这种情况下,编译器将假定它是一个返回类型int的值的函数。然后,这将解释错误消息。