2013-03-12 46 views
0

我有一个类的数组,姑且称之为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 *”

怎么了?

+7

这听起来像你有两个类具有相同的名称,一个是全局,一个在B类内部。如果编译您的示例以确保它创建您想要说明的相同错误,它将有所帮助。 – 2013-03-12 22:48:44

+4

另外,使用'std :: vector'。 – 2013-03-12 22:49:04

+0

我假设你忘记在类声明后复制';',但这是一个完整的例子,它编译和演示问题的权利? ;) – 2013-03-12 22:50:49

回答

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; 
} 

或者,如果你一定没有列入啊,然后你可以预先申报,并定义数组:

std::vector< std::unique_ptr<A> > array; 
+1

但是,他/她说错误位于B :: B(构造函数)内,其中一个不合格的A将与B :: A相同。 – user1610015 2013-03-12 23:02:37

+0

我认为这个类在全局范围内,但是预声明在B中,所以B :: A预声明优先于::一个真实类声明。无论如何,这是我的猜测。需要更多的代码才能看到问题所在。 – 2013-03-12 23:36:48