簡體   English   中英

相互引用的結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM