回复 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;
}
////////////////////////////////////////////////////////////////////