1. ホーム
  2. c++

[解決済み] 内部クラスをフォワード宣言するには?[重複している]。

2022-04-16 13:37:35

質問

<余談
この質問には、すでにここで回答があります :
クローズド 1年前 .

こんな授業があるんだ...。

class Container {
public:
    class Iterator {
        ...
    };

    ...
};

他の場所で、Container::Iteratorを参照渡ししたいのですが、ヘッダーファイルはインクルードしたくありません。クラスをフォワード宣言しようとすると、コンパイルエラーが発生します。

class Container::Iterator;

class Foo {
    void Read(Container::Iterator& it);
};

上記のコードをコンパイルすると...

test.h:3: error: ‘Iterator’ in class ‘Container’ does not name a type
test.h:5: error: variable or field ‘Foo’ declared void
test.h:5: error: incomplete type ‘Container’ used in nested name specifier
test.h:5: error: ‘it’ was not declared in this scope

Iterator クラスを宣言しているヘッダーファイルをインクルードする必要がないように、このクラスをフォワード宣言するにはどうすればよいでしょうか。

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

これは単純に不可能です。 コンテナの外側でネストした構造をフォワード宣言することはできません。 コンテナ内でのみ、前方宣言が可能です。

次のいずれかを行う必要があります。

  • クラスを非ネスト化する
  • ネストされたクラスが最初に完全に定義されるように、宣言の順序を変更する
  • 関数内で使用でき、ネストしたクラスが実装できる共通の基底クラスを作成する。