我正在处理 xinu ,我需要更改一些*.c
个文件。
我在文件ready.c
中有 struct :
struct newtimer{
struct newtimer* tnext;
struct newtimer* tprev;
int tkey;
int tprio;
int tcount;
};
然后我宣布:
struct newtimer *timer = NULL;
我在这个文件中使用了 timer 变量,我还需要在另一个文件中使用它(clkint.c
)。所以在clkint
我这样做了:
extern struct newtimer *timer;
(编译好吧) 但是当我尝试访问 timer 的字段时,我收到以下错误:
我做错了什么?
谢谢
修改
根据要求,这里有一些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 :(得分:1)
您的struct newtimer
类型未定义。您可能忘记包含定义struct newtimer
的头文件。
在struct something
中使用未知的结构名称时,C编译器会将其视为全新结构类型的前向声明。当然,这种类型是不完整的,这就是为什么你不允许访问任何类型的内脏。编译器对这些内部结构一无所知。
您struct newtimer
的定义在哪里?如果在头文件中定义,则必须将其包含在clkint.c
。