结构指针的未定义符号

时间:2013-05-17 21:37:08

标签: c extern

我正在处理 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 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 解决问题。

1 个答案:

答案 0 :(得分:1)

您的struct newtimer类型未定义。您可能忘记包含定义struct newtimer的头文件。

struct something中使用未知的结构名称时,C编译器会将其视为全新结构类型的前向声明。当然,这种类型是不完整的,这就是为什么你不允许访问任何类型的内脏。编译器对这些内部结构一无所知。

struct newtimer的定义在哪里?如果在头文件中定义,则必须将其包含在clkint.c