1. ホーム
  2. c

[解決済み] C - フィールドに不完全な型がある [重複] 。

2022-02-12 16:32:15

質問内容

下の表現では

struct Cat{
  char *name;
  struct Cat mother;
  struct Cat *children;
};


コンパイラは、2番目のフィールドに対して以下のエラーを出しますが、3番目のフィールドは出ません。

 error: field ‘mother’ has incomplete type
   struct Cat mother;
              ^


このエラーを理解するにはどうしたらよいですか?

どのように解決するのですか?

このエラーは、メンバーを struct の型はまだ完全に定義されていないので、コンパイラはオブジェクトのレイアウトを決定するために、そのサイズを知ることができません。

このケースでは struct Cat は、それ自身の完全なオブジェクトをメンバーとして保持している(つまり mother フィールド)。このような型定義における無限再帰はもちろん不可能である。

とはいえ、構造体はそれ自身の他のインスタンスへのポインタを含むことができます。そこで、定義を以下のように変更すると、有効な struct :

struct Cat{
  char *name;
  struct Cat *mother;
  struct Cat *children;
};