クラス構造内の不完全な型
オブジェクト自体の中にオブジェクトをカプセル化することは便利な設計パターンですが、クラス構造を定義しようとすると一般的なエラーが発生します。同じ型のメンバーを持つクラス。次の例を考えてみましょう:
class A { private: A member; }
コンパイル時に、「不完全な型」というエラーが発生します。これは、メンバー変数を定義するときに、A クラス自体がまだ定義中であり、その型が未定義であるためです。
ただし、クラス型へのポインターを使用すると、この問題が回避されます。
class A { private: A* member; }
これは、ポインターが宣言された時点でコンパイラーが A を有効なクラス名として認識し、「A へのポインター」型を許可するためです。
非ポインター メンバー型が必要な場合は、代替アプローチを使用できます。
class A;
のように、定義せずにクラスを作成すると、コンパイラに次のことが通知されます。 A はクラス型であり、非ポインター メンバーとして参照できます:
class B { private: A member; };
class A { private: boost::shared_ptr<A> member; };
ポインタは自己参照を参照するのに便利かもしれませんクラス型の場合、「不完全な型」エラーの根本的な理由を理解することは、堅牢で効率的なオブジェクト指向構造を設計するために重要です。
以上が同じ型のクラス メンバーを定義すると「不完全な型」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。