0

我有一个类,我们称它为 A,我想创建另一个类 B,它将包含 A 的 n 个实例。

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 回答