[解決済み] 内部クラスをフォワード宣言するには?[重複している]。
2022-04-16 13:37:35
質問
<余談
こんな授業があるんだ...。
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 クラスを宣言しているヘッダーファイルをインクルードする必要がないように、このクラスをフォワード宣言するにはどうすればよいでしょうか。
どのように解決するのですか?
これは単純に不可能です。 コンテナの外側でネストした構造をフォワード宣言することはできません。 コンテナ内でのみ、前方宣言が可能です。
次のいずれかを行う必要があります。
- クラスを非ネスト化する
- ネストされたクラスが最初に完全に定義されるように、宣言の順序を変更する
- 関数内で使用でき、ネストしたクラスが実装できる共通の基底クラスを作成する。
関連
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] フォワード宣言はどのような場合に使用できますか?
-
[解決済み】C++でネストした型/クラスの前方宣言
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】C++でネストした型/クラスの前方宣言
-
[解決済み] 名前空間内のクラスをダブルコロンで順次宣言できないのはなぜですか?