如下:
有类A
////////////////////////////////////////////////
//classa.h#ifndef CLASSA_H
#include "classb.h"class a
{
private:
b m_object;};
#endif类B
////////////////////////////////////////////////
//classb.h#ifndef CLASSB_H
#include "classa.h"class b
{
private:
a m_object;
};
#endif出现以上情况是编译通不过,请问如何解决?
有类A
////////////////////////////////////////////////
//classa.h#ifndef CLASSA_H
#include "classb.h"class a
{
private:
b m_object;};
#endif类B
////////////////////////////////////////////////
//classb.h#ifndef CLASSB_H
#include "classa.h"class b
{
private:
a m_object;
};
#endif出现以上情况是编译通不过,请问如何解决?
有一个类A,该类中有很多对象。有别一个工具类B来专门处理该类A中的这些对象。但由于这些对象都在类A中,所以类B要引用这些对象就必须要得到类A的指针。类A与类B是平级的关系,因此在类B中声明类A的指针类型时就需要用于类A的类定义文件,即类A的.h文件。而另一方面,由于类B是类A的工具类,所以类A中要声明类B的对象,这也需要包含类B的类定义.h文件,于是就出现了互相包含的情况。
class c
{
};
class a : public c
{
private:
c* m_object;
};
class b : public c
{
private:
c* m_object;
};
互相包含 有点象交集 可以独立出来一个类
然后两个类分别包含这个独立的类
一样的啊,“在构造函数里new成a或b”还是要用到类A和类B的定义.h文件,否则在new的时候会报错,未定义的a()或b()。
class A
{
B b;
};
-------------------------
extern class A;
class B{
A a;
};
class A
{
B b;
};
-------------------------
class A;
class B{
A * a;
};然后在b.cpp里面把
#inlcude"a.h"
加上这样用就可以了,呵呵~~
class b;
class a
{
b* m_b;
}
class b
{
a m_a;
}
关键有两点:
(1)其中一个类需要提前声明.
(2)被提前声明的类在其被具体定义之前只能声明该类的指针或引用,如上面class a定义中只能声明class b的指针(或引用).
一旦类的定义结束,用该类来声明类实例对象或对象指针,引用都是合法的.