ネストされたクラスの前方宣言
C では、コンテナの外でネストされたクラスを前方宣言することはできません。コンパイラーは、その包含スコープ内でネストされたクラスの完全な定義を必要とします。
ネストされたクラスを持つクラスがあるとします。
class Container { public: class Iterator { // ... }; // ... };
別のコンテナーで Container::Iterator を前方宣言しようとしています。ヘッダー ファイルではコンパイル エラーが発生します:
class Container::Iterator; class Foo { void Read(Container::Iterator& it); };
理由制約事項
コンパイラーは、コードを生成する前に、ネストされたクラスを含むクラスの完全な構造を知る必要があります。コンテナの外でネストされたクラスを前方宣言すると、この依存関係が壊れます。
回避策のオプション
この制限を回避するには、いくつかのオプションがあります:
これらのガイドラインに従うことで、ネストされたクラスを前方宣言するときにコードが正常にコンパイルされることを確認できます。
以上がネストされた C クラスをコンテナの外に転送宣言できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。