如下:
有类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出现以上情况是编译通不过,请问如何解决?

解决方案 »

  1.   

    但现在有这样的情况。
    有一个类A,该类中有很多对象。有别一个工具类B来专门处理该类A中的这些对象。但由于这些对象都在类A中,所以类B要引用这些对象就必须要得到类A的指针。类A与类B是平级的关系,因此在类B中声明类A的指针类型时就需要用于类A的类定义文件,即类A的.h文件。而另一方面,由于类B是类A的工具类,所以类A中要声明类B的对象,这也需要包含类B的类定义.h文件,于是就出现了互相包含的情况。
      

  2.   

    写一个基类c,a、b继承于c,m_object改成c的指针,在构造函数里new成a或b
    class c

    };
    class a : public c
    {
     private:
     c* m_object;
    };
    class b : public c
    {
     private:
     c* m_object;
    };
      

  3.   

    node
    互相包含 有点象交集 可以独立出来一个类 
    然后两个类分别包含这个独立的类
      

  4.   

    TO honker110(honker):
    一样的啊,“在构造函数里new成a或b”还是要用到类A和类B的定义.h文件,否则在new的时候会报错,未定义的a()或b()。
      

  5.   

    #inlcude"b.h"
    class A
    {
      B b;
    };
    -------------------------
    extern class A;
    class B{
    A a;
    };
      

  6.   

    #inlcude"b.h"
    class A
    {
      B b;
    };
    -------------------------
    class A;
    class B{
    A * a;
    };然后在b.cpp里面把
    #inlcude"a.h"
    加上这样用就可以了,呵呵~~
      

  7.   

    正确声明如下:
    class b;
    class a
    {
      b* m_b;
    }
    class b
    {
      a  m_a;
    }
    关键有两点:
    (1)其中一个类需要提前声明.
    (2)被提前声明的类在其被具体定义之前只能声明该类的指针或引用,如上面class a定义中只能声明class b的指针(或引用).
    一旦类的定义结束,用该类来声明类实例对象或对象指针,引用都是合法的.
      

  8.   

    只声明class A 和#include "a.h"有什么区别吗?
      

  9.   

    有区别,include包含的话,编译会出错的两个头文件互相包含是不行的现在用指针的话,不用包含了,只要声明一下就可以了
      

  10.   

    wang_zhen_jun() ( ) 忘了加分号,我试了一下,这样可以,handsomerun(毛毛)说得对,我怎么就没想到呢,呵呵