Вопрос
Я работаю с компилятором 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) и повторите попытку.