编译时,数组类型具有不完整的元素类型错误

时间:2012-04-30 15:47:32

标签: c compiler-construction

在我们的课程中,我们将实现一个在bochs模拟器上构建的内核。

其中一个子任务是实现固定优先级调度。以前我们的调度程序只有一个线程队列,但现在我想创建一个线程队列数组。

但我的数组不断收到错误“数组类型有不完整的元素类型”我在下面发布了一些代码,任何人都可以看到问题。

kernel.h当

...
extern struct thread_queue
ready_queue_table[MAX_SYS_PRIORITY];
...

kernel.c

...
#include <sysdefines.h>
#include "threadqueue.h"
...
struct thread_queue
ready_queue_table[MAX_SYS_PRIORITY];
...

sysdefines.h

...
#define MAX_SYS_PRIORITY         (5)
...

threadqueue.h

...
struct thread_queue
{
 int head;  /*!< The index to the head of the thread queue.
                 Is -1 if queue is empty. */
 int tail;  /*!< The index to the tail of the thread queue.
                 Is -1 if queue is empty. */
};
...

2 个答案:

答案 0 :(得分:2)

您需要在创建数组之前定义您创建的数组结构(编译器需要查看您创建的类型为whos的定义),否则类型为不完整类型对于编译器而言,它不知道该类型的内存布局,因此无法创建它的数组。

您应该将结构的定义放在头文件中,并将其包含在您想要引用结构元素的文件中,或者执行一些需要编译器知道结构布局的操作。

答案 1 :(得分:0)

kernel.h中你有这个:

extern struct thread_queue
ready_queue_table[MAX_SYS_PRIORITY];

我怀疑有些事件包括kernel.h,其中threadqueue.h尚未包含在内。我认为您需要将#include "threadqueue.h"添加到kernel.h或删除extern

但所有这些只是猜测,因为代码片段相当稀疏。