2013-05-17 1 views
-1

Я работаю над xinu, и мне нужно изменить некоторые файлы *.c. У меня есть этот -структуру в файле ready.c:undefined символ struct pointer

struct newtimer{ 
    struct newtimer* tnext; 
    struct newtimer* tprev; 
    int tkey; 
    int tprio; 
    int tcount; 
}; 

, а потом я заявил:

struct newtimer *timer = NULL; 

я сделал некоторое использование с таймера переменной в этом файле и мне нужно, чтобы использовать его в другой файл также (clkint.c). Таким образом, в clkint я это сделал:

extern struct newtimer *timer; 

(который компилирует хорошо) , но когда я пытаюсь получить доступ к таймера «s поля я получаю эти ошибки: clkint errors

Что я делаю неправильно?

Спасибо

редактировать:

В соответствии с просьбой, вот некоторые из clkint.c:

struct newtimer *t; 
extern struct newtimer *timer; 
... 
t = timer; 
while(t!= NULL) 
{ 
    ++(t->tcount); 
    if(t->tcount >= 18){ 
     t->tcount = 0; 
     newprior = proctab[t->tkey]->pprio + 10; 
     t->tcount = newprior; 
     chprio(t->tkey, newprior); 
    } 
    t = t->tnext; 
    resched(); 
} 

редактировать:

Замена всех t с с timer s делает не решить проблему.

+0

Можем ли мы увидеть содержимое функции clkint? – bstamour

+2

Похоже, вам нужен заголовочный файл '.h', который объявляет вашу структуру' newtimer', так что вы можете вставить его в clkint.c, чтобы clkint.c узнал о структуре. –

+0

@RobertHarvey не выполняет ключевое слово * extern *? –

ответ

1

Тип struct newtimer не определен. Вы, вероятно, забыли включить файл заголовка, который определяет struct newtimer.

Когда вы используете неизвестное имя структуры в struct something, компилятор C рассматривает это как объявление вперед абсолютно нового типа структуры. Тип, конечно, неполный, поэтому вам не разрешается обращаться к внутренним частям этого типа. Компилятор просто ничего не знает об этих внутренностях.

0 Где находится struct newtimer? Если он определен в файле заголовка, вы должны включить его в свой clkint.c.

+0

Вы, и все остальные, кто сказал, что мне нужен файл .h', были правильными. Вместо этого я объявил структуру в некотором '.h' файле, включил ее в мои файлы и работал как магия. –