我有一个班级,我们称之为A,我想创建另一个B级,它将包含A个实例。
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 *”
类型的实体怎么了?
答案 0 :(得分: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;
}
或者如果你必须没有包括A.h,那么你可以预先声明A,并将数组定义为:
std::vector< std::unique_ptr<A> > array;