回复 1# 的帖子
											基本方法:两个类文件相互包含,去掉一个包含,改为声明。
水平有限,给出几个例子:
注意:只包含必须表示的代码
使用vc6.0
例子一:
////////////////////////////////////////////////////////////////////
// A.h文件
class B;//声明B
class A  
{
public:
    A();
    virtual ~A();
    B* m_b;//必须是指针,如是变量就不行了。因为B.h文件中有A m_a;如果写为B m_b;那就是真正的相互包含了,无穷递推了。
};
////////////////////////////////////////////////////////////////////
// A.cpp文件
#include "A.h"
//#include "B.h"
A::A()
{
   m_b=NULL;
}
A::~A()
{
}
////////////////////////////////////////////////////////////////////
// B.h文件
#include "A.h"
//class A;
class B  
{
public:
    B();
    virtual ~B();
    A m_a;
};
////////////////////////////////////////////////////////////////////
// B.cpp文件
#include "B.h"
//#include "A.h"
B::B()
{
}
B::~B()
{
}
////////////////////////////////////////////////////////////////////
//主函数文件
#include "A.h"//去掉也可以
#include "B.h"
int main(int argc, char *argv[]) 
{ 
    B myB;
    A myA;
    return 0; 
} 
////////////////////////////////////////////////////////////////////
例子二:
只是更改例子一的B.h文件
////////////////////////////////////////////////////////////////////
// B.h文件
//#include "A.h"
class A;
class B  
{
public:
    B();
    virtual ~B();
    A* m_a;//注意如果写为A m_a;不行。要想的话,必须加#include "A.h"
};
////////////////////////////////////////////////////////////////////
例子三:
也只是更改例子一的B.h文件
////////////////////////////////////////////////////////////////////
// B.h文件
#include "A.h"
class A;//去掉也可
class B  
{
public:
    B();
    virtual ~B();
    A* m_pa;//指针
    A  m_a; //非指针
};
////////////////////////////////////////////////////////////////////
例子四:
////////////////////////////////////////////////////////////////////
// A.h文件
class B;
class A  
{
public:
    A();
    virtual ~A();
    void Set(B& b,const int value=0);
};
////////////////////////////////////////////////////////////////////
// A.cpp文件
#include "A.h"
#include "B.h"
A::A()
{
}
A::~A()
{
}
void A::Set(B& b,const int value)
{
    b.m=value;
};
////////////////////////////////////////////////////////////////////
// B.h文件
#include "A.h"
//class A;//去不去掉皆可
class B  
{
public:
    B();
    virtual ~B();
    void Print();
    friend void A::Set(B& b,const int value);
private:
    int m;
};
////////////////////////////////////////////////////////////////////
// B.cpp文件
#include "B.h"
B::B():m(20)
{
}
B::~B()
{
}
void B::Print()
{
    printf("%d\n",m);
}
////////////////////////////////////////////////////////////////////
//主函数文件
#include "A.h"//去掉也可以
#include "B.h"
int main(int argc, char *argv[]) 
{ 
    B myB;
    A myA;
    myB.Print();
    myA.Set(myB,99);
    myB.Print();
    return 0; 
} 
////////////////////////////////////////////////////////////////////