c - 结构体指针的 undefined symbol

标签 c extern

我正在开发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 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不能解决问题。

最佳答案

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

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

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

关于c - 结构体指针的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618305/

相关文章:

PCM转wav文件

C - 如何使用外部变量

c++ - 混合 C 和 C++ 代码时出现链接错误

c - C 中的外部声明和头文件

c - 在C中,功能的extern关键字完全必要吗?

python - 用Python调用gcc编译多个文件

C函数中的指针赋值

c - 这两种在C中获取字符串输入的方法有什么区别?

c - 在 C 中的服务器和客户端应用程序中通过套接字发送和接收 JSON

objective-c - 何时何地从任意消息返回值初始化外部变量?