我正在开发xinu,我需要更改一些*.c
文件。
我在文件 ready.c
中有这个结构:
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;
(编译正常) 但是当我尝试访问计时器的字段时,我收到以下错误:
我做错了什么?
谢谢
编辑:
根据要求,这里是一些 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
并不能解决问题。
最佳答案
您的struct newtimer
类型未定义。您可能忘记包含定义 struct newtimer
的头文件。
当您在struct some
中使用未知的结构名称时,C编译器会将其视为全新结构类型的前向声明。当然,该类型是不完整的,这就是为什么您不允许访问该类型的任何内部结构。编译器对这些内部结构一无所知。
你的struct newtimer
在哪里定义的?如果它是在头文件中定义的,则必须将其包含到 clkint.c
中。
关于c - 结构体指针的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618305/