a.h
#include "d.h"d.h
#include "b.h"b.h
#include "a.h"在b.h里用class a;那种方法不行,必须要在b里用a

解决方案 »

  1.   

    // in file a.h
    #ifndef _A_H
    #define _A_H
    #include "d.h"
    #endif
      

  2.   

    #ifndef XXXXX
    #define XXXXX......#endif这样就可以解决了。还是不太明白楼主说的问题到底是什么。
      

  3.   

    这种循环头文件包含对编译器可是一个考验啊,必须要避免重复include,常用
    的方式就是用宏开关。
    另外VC的编译器cl.exe可使用/Zm参数设定编译器内存分配上限。See details in MSDN please!
      

  4.   

    问题可以简化成这样
    class A  
    {
    public:
    A();
    virtual ~A();public:
    B b;};class B  
    {
    public:
    B();
    virtual ~B();public:
    A *a;
    };实际上是这样,A是父窗口,B是子窗口,现在,在B里需要调A的方法,怎么办
      

  5.   

    不会吧,这也没法优化,整个程序是个控件,A是父窗口,同时负责和外面的数据交换,这个是不能改的,B是A 创建的子窗口,在B上点击鼠标,这个消息肯定是B收到,现在的要求就是在B上点鼠标,然后向外面发送XML,这接口只能在A里面,所以,我肯定要调A的方法
      

  6.   

    类的聚合,我写的示例如下:
    class A {
    public:
    A():m_b(this) {};
    virtual ~A() {}; void CallB() { 
    TRACE("Object A: Call B.\n");
    m_b.DoIt();
    }; void DoIt() { 
    TRACE("Object A: Do it OK.\n");
    }; class B {
    public:
    B(A* pA) {m_pA = pA;};
    virtual ~B() {}; void DoIt() { 
    TRACE("Object B: Do it OK.\n");
    }; void CallA() { 
    TRACE("Object B: Call A.\n");
    m_pA->DoIt();
    }; A* m_pA; friend class A;
    } m_b;
    };void CTestDlg::OnButton1()
    {
    A a;
    a.CallB();
    TRACE("\n");
    a.m_b.CallA();
    }输出:
    Object A: Call B.
    Object B: Do it OK.Object B: Call A.
    Object A: Do it OK.