多檔案中的結構體相互巢狀

2021-10-09 12:44:00 字數 620 閱讀 6274

結構體可在多檔案中重複宣告多次(如"a.h"和"b.h"中都含有 struct st),所以可以有如下形式:

a.h:

struct st1;

struct st2;

b.h:

struct st1;

struct st2;

a.c:

#include "a.h"

struct st1

;

b.c:

#include "b.h"

struct st2

;

這樣寫的結果就是編譯時會報錯。

報錯的原因:系統在編譯過程(就是形成可執行檔案的過程)中,會判斷結構體的大小並賦予其空間,然而若寫成上述結構體巢狀的形式,系統會無法判斷結構體的具體大小,從而無法分配空間。

解決方法:既然報錯的原因是無法賦予具體大小的空間,那麼讓空間變得可以計算即可。

struct st1

;struct st2

;

採用具有確定空間大小的指標,便可以避免報錯。

結構體中巢狀結構體

結構體的巢狀問題 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1不使用typedef時 錯誤的方式 struct tag 1 這種宣告是錯誤的,...

結構體的巢狀問題

結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1不使用typedef時 錯誤的方式 struct tag 1 這種宣告是錯誤的,因為這種宣告實際上...

結構體儲存檔案,從檔案中讀取結構體

include include include typedef enumtype typedef structcard int fd 0 initialize card void init card card open a file int file open void return 0 read ...