我试图采用RRhead,在RRhead上有一个新的RCB点,因为它是下一个,并且在新的RCB处有RRhead点,因为它是先前的点。C结构体的不完整类型
typedef struct{
int sequence_number;
int file_descriptor;
FILE *requested_file;
int bytes_remaining;
int quantum;
struct RCB *next;
struct RCB *prior;
} RCB;
typedef struct RCB RCB;
RCB *RRhead = NULL;
static void admit_to_scheduler_RR(int fd, FILE *fin){
int sequence_counter, new_bytes_remaining, new_quantum = 0;
RCB new_rcb = {sequence_counter, fd, fin, new_bytes_remaining, new_quantum, RRhead, NULL};
RRhead->prior = &new_rcb;
RRhead = &new_rcb;
sequence_counter++;
}
产生以下错误:
sws.c: In function ‘admit_to_scheduler_RR’:
sws.c:318:10: error: variable ‘new_rcb’ has initializer but incomplete type
struct RCB new_rcb = {sequence_counter, fd, fin, new_bytes_remaining, new_quantum, RRhead, NULL};
^
sws.c:318:10: warning: excess elements in struct initializer [enabled by default]
sws.c:318:10: warning: (near initialization for ‘new_rcb’) [enabled by default]
sws.c:318:10: warning: excess elements in struct initializer [enabled by default]
sws.c:318:10: warning: (near initialization for ‘new_rcb’) [enabled by default]
sws.c:318:10: warning: excess elements in struct initializer [enabled by default]
sws.c:318:10: warning: (near initialization for ‘new_rcb’) [enabled by default]
sws.c:318:10: warning: excess elements in struct initializer [enabled by default]
sws.c:318:10: warning: (near initialization for ‘new_rcb’) [enabled by default]
sws.c:318:10: warning: excess elements in struct initializer [enabled by default]
sws.c:318:10: warning: (near initialization for ‘new_rcb’) [enabled by default]
sws.c:318:10: warning: excess elements in struct initializer [enabled by default]
sws.c:318:10: warning: (near initialization for ‘new_rcb’) [enabled by default]
sws.c:318:10: warning: excess elements in struct initializer [enabled by default]
sws.c:318:10: warning: (near initialization for ‘new_rcb’) [enabled by default]
sws.c:318:14: error: storage size of ‘new_rcb’ isn’t known
struct RCB new_rcb = {sequence_counter, fd, fin, new_bytes_remaining, new_quantum, RRhead, NULL};
^
sws.c:319:9: error: dereferencing pointer to incomplete type
RRhead->prior = &new_rcb;
^
我不知道为什么我收到了多余的元素警告线索。我没有正确初始化new_rcb吗?我是否需要创建它,然后将所有字段设置为我想要的?
我相信这一切都与new_rcb有一个“不完整的类型”有关。大多数使用Google表示这是因为编译器不知道RCB的大小应该是多少。它似乎表明我需要将此结构定义放入一个标题中。这是绝对必要的吗?
'typedef struct RCB RCB;'尝试删除该文件 –
删除该文件会导致此函数发生不同的错误。 –