これは私が受け取っている次のエラーです
エラー: 'クラス A' の前方宣言 |
クラスのプロトタイプを作成し、グローバルに利用できるようにしようとしています。これは画像で説明するのが一番いいと思ったので、以下に示します。
おっと、FileA.cpp にも #include External.h があることを忘れていました。
これは私が受け取っている次のエラーです
エラー: 'クラス A' の前方宣言 |
クラスのプロトタイプを作成し、グローバルに利用できるようにしようとしています。これは画像で説明するのが一番いいと思ったので、以下に示します。
おっと、FileA.cpp にも #include External.h があることを忘れていました。
オブジェクトを (自動または with でnew
) インスタンス化するには、可視型の完全な定義が必要です。本体はclass A
Main.cpp に表示される必要があります。
前方宣言されたばかりの不完全な型は、使用が制限されています。次のように使用できます。
例えば
class A;
class X {
A* p;
A& r;
std::vector<A> v;
};
main は、クラスが存在すること以外はクラスについて何も知らないときに A を構築しようとしています。別の cpp ファイルに隠されているのではなく、Main.cpp で使用できる定義が必要です。
クラスを使用するときは、その完全な定義がA
必要です。コンパイラーは、それが持っているメソッドと変数を他にどのように知るのでしょうか? これには、ポインタを作成するだけの場合でも、オブジェクトのインスタンスの構築が含まれます。
クラスの前方宣言は、そのクラスへのポインターまたは参照を宣言するのに十分ですが、他には何もありません。クラスの関数 (およびコンストラクターを含む) を使用する場合は、使用時に完全な定義を使用できるようにする必要があります。
new
完全なクラス定義がないと、 ( を使用して) オブジェクトをインスタンス化することはできません。
定義を移動するかExternal.h
、ファクトリ メソッドを使用して有効なポインタを返します。