Вопрос

Я работаю с компилятором C89 и сталкиваюсь с ошибкой ввода указателя.

Код вызова:

struct cpu_state_type cpu_state;
//Stuff here....
foo()
{
    print_out_cpu(&cpu_state);
}

Print_out_cpu определен в другом месте, а файл H #included.

struct cpu_state_type
{
  int r[12];
};
void print_out_cpu(struct cpu_state_type *c);

Я получаю ошибку:

error: incompatible type for argument 1 of 'print_out_cpu'

Насколько я могу понять,&cpu_state тип возврата cpu_state_type*, поэтому я в замешательстве.

Это было полезно?

Решение

Вы уверены, что прототип имеет * в этом?Если я скомпилирую(gcc -std=c89) следующий код, я получаю именно эту ошибку:

  struct cpu_state_type {
     int r[12];
  };

  // note that it is the structure as the param here (not the pointer)
  void print_out_cpu(struct cpu_state_type c);
  struct cpu_state_type cpu_state;

  foo()
  {
     print_out_cpu(&cpu_state);
  }

Другие советы

Я не вижу никаких проблем, поэтому мне интересно, ошибка ли это в вашем операторе включения, в файле и т. д.

Будет сложно определить причину ошибки, не видя источника.Попробуйте создать исходный файл, например:

#include struct cpu_state_type cpu_state;

недействительный Фу() {
print_out_cpu(&cpu_state);}

Если это не вызывает проблему, продолжайте добавлять что-то, пока это не вызовет.Если это действительно вызывает проблему, извлеките соответствующие части заголовочного файла в исходный код (и удалите #include) и повторите попытку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top