0

クラスがあり、それを A と呼びましょう。A の n インスタンスを保持する別のクラス B を作成したいと考えています。

B ヘッダー ファイル:

class A;
class B
{
    B();
    A * arrayofA;
}

B.cpp

#include "B.h"
#include "A.h"
B::B() {
 arrayofA = new A[n];
}

Visual Studio は = 演算子に下線を付け、次のように通知します: エラー: タイプ "B::A *" の値をタイプ "A *" のエンティティに割り当てることはできません

どうしたの?

4

1 に答える 1

2

コンパイラのエラーに基づいて、事前宣言を誤ってBのスコープ内に置いたようです。

コンパイラはあなたがこれをしていると思っているようです:

class B
{
   class A; //It's seeing 'A' inside of 'B'.

   A *arrayOfA;
};

B::A:: Aの両方が表示されています。理由については、知るのに十分なコードがありません。名前空間とクラスを確認し、Aが事前に宣言されている場所と、Aが実際に定義されている場所を再確認します。それらが同じスコープ内にあるかどうかを確認してください。

ベクトルを使用して同じ目的を果たすことができます。

#include "A.h"

class B
{
    std::vector<A> array;
}

または、Ahを含めないようにする必要がある場合は、Aを事前に宣言し、配列を次のように定義できます。

std::vector< std::unique_ptr<A> > array;
于 2013-03-12T22:53:51.127 に答える