编译时,数组类型具有不完整的元素类型错误
在我们的课程中,我们将实现在bochs模拟器上构建的内核。
其中一个子任务是实现固定优先级调度。 以前我们的调度程序只有一个线程队列,但现在我想创建一个线程队列数组。
但我的数组不断得到一个编译错误“数组类型有不完整的元素类型”我发布了下面的一些代码,任何人都可以看到问题。
kernel.h当
... extern struct thread_queue ready_queue_table[MAX_SYS_PRIORITY]; ...
kernel.c
... #include #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. */ }; ...
你需要在创建数组之前定义你创建的数组结构(编译器需要查看你创建的类型whos数组的定义),否则类型是编译器的不完整类型 ,它不知道内存该类型的布局因此无法创建它的数组。
您应该将结构的定义放在头文件中,并将其包含在您想要引用结构元素的文件中,或者执行一些需要编译器知道结构布局的操作。
在kernel.h
你有这个:
extern struct thread_queue ready_queue_table[MAX_SYS_PRIORITY];
我怀疑有一些事情包括kernel.h
,其中还没有包含threadqueue.h
。 我想你要么需要将#include "threadqueue.h"
添加到kernel.h
要么删除那个extern
。
但所有这些只是猜测,因为代码片段非常稀疏。