我有一个类,我们称它为 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 *”类型的实体
怎么了?
基于编译器错误,听起来您不小心将预声明放在了 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;