ошибка: недопустимый аргумент типа g — & gt; ’(есть‘ int ’)

Я пытаюсь собрать старый 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

Решение

Основываясь на сообщении об ошибке, одной из возможных причин является то, что объявление функции symbol_get_obj не появляется до место, которое вы называете, что делает возвращаемое значение по умолчанию для типа intнедопустимый тип для оператора ->, Вы можете проверить это. Убедитесь в правильном присутствии symbol_get_objобъявление через включение заголовочного файла или явный прототип функции.

4

Другие решения

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

Это может иметь смысл, только если

symbol_get_obj(symbolP)

возвращается int, Что это не так.

Итак, единственный логический вывод заключается в том, что symbol_get_obj не был объявлен в той точке кода, где произошла ошибка. В этом случае компилятор будет считать, что это функция, которая возвращает значение типа int, Что бы потом объяснить сообщение об ошибке.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector