2013-04-12 56 views
1

這是我的頭文件:頭文件錯誤:不完全類型是不允許

typedef int* Arg; 
typedef int* Args[]; 
typedef int** ArgsList[]; 

typedef int (*ProcessStart)(Args); 

typedef struct PCBEntry{ 

    ProcessStart proc; 
    Args args; 
    int pid; 
    int curr_proc; 
    int sched_info; 
    int pc; 

} PCBEntry; 

我得到的結構的Args args線的錯誤,我不知道爲什麼。

回答

2

因爲你定義Args作爲int *[],構件args被有效地聲明爲

int *args[]; 

這是一種柔性陣列構件,並且它們只允許在結構的端部。

如果你的意思是暗示Args是一個指針(在同樣的char **argv),聲明爲指針:

typedef int **Args; 
+2

「你不能把一個‘’在結構中」可變大小的數組 - 除非你有一個C99編譯器和你把可變大小的數組結構體的結束。 – 2013-04-12 15:37:42

+0

@ H2CO3:謝謝,修正。 – nneonneo

+0

@ H2CO3嚴格來說,靈活的陣列成員不是一個可變長度陣列。您不能將VLA放入結構中。 –

0

而不是使用

typedef int* Args[]; 

,並在你的結構聲明

Args args; 

你會得到更好的服務只使用第一類爲您的結構聲明...

Arg args[]; 

說實話,我甚至不能確定的第一個是法律的typedef,但它只是,我從來沒有做過任何事就像之前的typedef一樣。我的直覺告訴我,這是不合法的,因此Args是未定義的,因此你得到的錯誤。如果我將左右規則應用於該規則,則Args是一種指向int的指針數組......所以,也許這是合法的,但它確實對我的眼睛看起來很有趣。

相關問題