[英]Structs that refer to each other
我希望有兩個可以互相包含的結構。 這是一個例子:
struct a {
struct b bb;
};
struct b {
struct a aa;
};
但是這段代碼沒有編譯。 gcc說:
test.c:3: error: field ‘bb’ has incomplete type
有沒有辦法實現這個目標?
這應該怎么樣? a
將包含b
,其中包含a
,其中包含b
等...
我想你想用指針代替?
struct b;
struct a {
struct b *bb;
};
struct b {
struct a *aa;
};
即便如此,編碼風格也不好 - 如果可能的話,應該避免循環依賴。
struct a;
struct b;
struct a{
struct b *bb;
};
struct b{
struct a *aa;
};
大多數頭文件在定義其成員之前聲明結構。 結構定義將在其他地方定義。
解決這個問題的常用方法是使它們成為指針然后動態分配它們,甚至只是從其他結構的靜態實例的地址中指定指針。
struct a {
struct b *bb;
};
struct b {
struct a *aa;
};
struct a a0;
struct b b0;
void f(void) {
a0.bb = &b0;
b0.aa = &a0;
}
但是,我建議您尋找一個樹狀結構的組織。 也許兩個對象都可以指向常見的第三種類型。
這是荒謬的。
想象一下,如果你說每個X
包含一個Y
並且每個Y
包含一個X
,那么每個X
內部都是一個Y
,而Y
又包含一個X
,而X
又包含一個Y
,而Y
又包含一個X
, 無限的 。
相反,您可以讓X
包含對 Y
的引用或(或指向 ),反之亦然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.