問題は、あなたが持っていない限り、あなたが構造体変数(または他の構造内側部材)を定義することができないということです実際の構造の完全な定義。前方宣言は完全な定義ではありません。前方宣言がある場合、宣言できるのは構造体へのポインタです。あなたが行うことができ、すべての構造体へのポインタを宣言するので、これは動作します
typedef struct bar BAR; // Forward declaration of the structure and type-alias definition in one line
typedef struct foo FOO; // Forward declaration of the structure and type-alias definition in one line
struct foo {
char a;
BAR *b; // Define a *pointer* to the BAR structure
FOO *s; // Define a *pointer* to the FOO structure
};
のようなもので、コンパイラは唯一、それは完全な構造を必要としない、構造が存在することを知っている必要があります意味
定義。このために、通常の前方宣言だけで十分です。
構造を再帰的に参照するときにも、完全な定義が閉じ中括弧まで完全ではないため、ポインタも必要であることにも注意してください。
ポインタの問題と同様に、特に「extern」について質問しました。 extern構造体が意味することは何ですか?達成するために何を望んでいますか?このコンパイルユニットは、構造体の内容を使用する必要がある場合は完全な定義が必要です。あなたは構造体のexternインスタンスを意味しましたか?私の構造体の – Rup
私は関数または構造体fooへのポインタが必要です。 functionまたはstruct fooには、パラメータまたはメンバprev構造体があります。問題は構造依存を一緒に宣言することです。変数ではありません。 –
OK、以下の答えはあなたが望むものだと思います:メンバーを組み込み構造体ではなくポインタ型構造体として宣言する必要があります。関数ポインタは正常に動作するはずです。 – Rup