2010-03-09 2 views
3

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

телефонный код:.

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

Print_out_cpu определяется в другом месте, а файл Н #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*, поэтому я смущен.

+0

Вы можете попытаться бросить на '(cpu_state_type *)' и посмотреть, работает ли он/сбои? – pajton

+0

Где находится 'struct cpu_state_type'? –

+0

pajton: это ошибки на этом литье. Добавление (struct cpu_state_type *) заставляет его работать лучше, но потом говорит, что не может найти print_out_cpu (!!). –

ответ

1

Уверены, что у прототипа есть *? Если я компилирую (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); 
    } 
0

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

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

#include struct cpu_state_type cpu_state;

void foo() {
print_out_cpu(&cpu_state); }

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

+4

#include struct cpu_state_type cpu_state; ? –

Смежные вопросы