私は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に「不完全な型」を持つことと関係していると思います。ほとんどのグーグルは、RCBのサイズをコンパイラが知っていないため、これが原因であることを示しています。これは、この構造体の定義をヘッダに配置する必要があることを示しているようです。これは絶対に必要ですか?
'typedef struct RCB RCB;'それを削除しようとしました –
これを削除すると、この関数で異なるエラーが発生します。 –