C 取消对内核中不完整类型的指针的引用

C 取消对内核中不完整类型的指针的引用,c,linux-kernel,C,Linux Kernel,最近我试图修改3.13.11的内核代码。我在/include dir中添加了一个头文件。在此文件中,我尝试使用task_struct,但遇到以下错误: error: dereferencing pointer to incomplete type rbuffer_free(&(task->task_pri)); 我的代码如下,task_pri是我在task_struct中添加的一些字段: static inline void release_pri(struct task_s

最近我试图修改3.13.11的内核代码。我在/include dir中添加了一个头文件。在此文件中,我尝试使用task_struct,但遇到以下错误:

error: dereferencing pointer to incomplete type
  rbuffer_free(&(task->task_pri));
我的代码如下,task_pri是我在task_struct中添加的一些字段:

static inline void release_pri(struct task_struct *task)
{
        rbuffer_free(&(task->task_pri));
我已经包含了头文件“linux/sched.h”。有人能给我解释一下吗


还有一件事也让我困惑。我阅读了“linux/kernel/exit.c”的源代码。它没有包含标题“linux/sched.h”,因此它如何使用task_struct而没有错误?

可能重复:谢谢,但我认为这是另一个问题。我的问题是编译器找不到task_struct的定义。我认为我对ached.h的重写与此无关。不完全清楚你是如何包括sched.h的。是在定义release_pri的头文件中,还是在也包含包含release_pri的头文件的C文件中?在任何情况下,调试的一种方法是将“-E”传递给gcc,以获得使用release_pri的C文件的预处理器输出。这将显示task_struct出现的确切位置/位置。我将头文件包含在包含release_pri的头文件中。我将尝试使用-E检查它。