在我们的课程中,我们将实现一个在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. */
};
...
答案 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
。
但所有这些只是猜测,因为代码片段相当稀疏。