我有一个类的数组,姑且称之为A,我想再拍B类将保持n个A的实例C++类持有其他类
乙头文件:
class A;
class B
{
B();
A * arrayofA;
}
B.cpp
#include "B.h"
#include "A.h"
B::B() {
arrayofA = new A[n];
}
视觉工作室强调=运算符,并告诉我: 错误:类型的值 “B :: A *” 不能被分配给类型的实体 “A *”
怎么了?
我有一个类的数组,姑且称之为A,我想再拍B类将保持n个A的实例C++类持有其他类
乙头文件:
class A;
class B
{
B();
A * arrayofA;
}
B.cpp
#include "B.h"
#include "A.h"
B::B() {
arrayofA = new A[n];
}
视觉工作室强调=运算符,并告诉我: 错误:类型的值 “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;
}
或者,如果你一定没有列入啊,然后你可以预先申报,并定义数组:
std::vector< std::unique_ptr<A> > array;
但是,他/她说错误位于B :: B(构造函数)内,其中一个不合格的A将与B :: A相同。 – user1610015 2013-03-12 23:02:37
我认为这个类在全局范围内,但是预声明在B中,所以B :: A预声明优先于::一个真实类声明。无论如何,这是我的猜测。需要更多的代码才能看到问题所在。 – 2013-03-12 23:36:48
这听起来像你有两个类具有相同的名称,一个是全局,一个在B类内部。如果编译您的示例以确保它创建您想要说明的相同错误,它将有所帮助。 – 2013-03-12 22:48:44
另外,使用'std :: vector'。 – 2013-03-12 22:49:04
我假设你忘记在类声明后复制';',但这是一个完整的例子,它编译和演示问题的权利? ;) – 2013-03-12 22:50:49