-1

これは私が受け取っている次のエラーです

エラー: 'クラス A' の前方宣言 |

クラスのプロトタイプを作成し、グローバルに利用できるようにしようとしています。これは画像で説明するのが一番いいと思ったので、以下に示します。

おっと、FileA.cpp にも #include External.h があることを忘れていました。

ここに画像の説明を入力

4

5 に答える 5

2

オブジェクトを (自動または with でnew) インスタンス化するには、可視型の完全な定義が必要です。本体はclass AMain.cpp に表示される必要があります。

前方宣言されたばかりの不完全な型は、使用が制限されています。次のように使用できます。

  1. ポインタ
  2. 参照
  3. テンプレート パラメータ

例えば

class A;
class X {
  A* p;
  A& r;
  std::vector<A> v;
};
于 2013-03-28T12:37:16.947 に答える
1

main は、クラスが存在すること以外はクラスについて何も知らないときに A を構築しようとしています。別の cpp ファイルに隠されているのではなく、Main.cpp で使用できる定義が必要です。

于 2013-03-28T12:35:48.487 に答える
0

クラスを使用するときは、その完全な定義がA必要です。コンパイラーは、それが持っているメソッドと変数を他にどのように知るのでしょうか? これには、ポインタを作成するだけの場合でも、オブジェクトのインスタンスの構築が含まれます。

于 2013-03-28T12:35:24.900 に答える
0

クラスの前方宣言は、そのクラスへのポインターまたは参照を宣言するのに十分ですが、他には何もありません。クラスの関数 (およびコンストラクターを含む) を使用する場合は、使用時に完全な定義を使用できるようにする必要があります。

于 2013-03-28T12:35:51.407 に答える
0

new完全なクラス定義がないと、 ( を使用して) オブジェクトをインスタンス化することはできません。

定義を移動するかExternal.h、ファクトリ メソッドを使用して有効なポインタを返します。

于 2013-03-28T12:34:25.303 に答える