通常情况下,会遇到两个不同类之间的成员之间的相互调用,即两个类中相互包含另一个类的对象,如果是简单的包含另一个类的头文件,就会造成两个类不断的创造另一个类的对象,造成一个死循环。所以应该慎重使用该方法。可以在调用过程中将另一个类的对象通过参数传递的方式传给另一个类中的成员函数。
以下的方法是错误的:
#include "b.h"
class {
int a;
B b;
};
#include "a.h"
class {
int b;
A a;
};
下面是正确的方法:只有其中一个包含另一个的头文件,另一个在.cpp文件中包含,在头文件开始时用class声明以下另一个类。另外在类中最好声明一个对象的指针类型,而不是直接创建对象。
/*a.h*/
#include <iostream>
using namespace std;
class b;
class a
{
public:
b *ib;
void putA()
{
cout<<"This is A Class"<<endl;
}
};
/*b.h/
<pre name="code" class="cpp">#include "a.h"
using namespace std;
class b
{
public:
a* ia;
void putB()
{
cout<<"This is B Class"<<endl;
}
};
<pre name="code" class="cpp">#include <stdio.h>
#include <tchar.h>
using namespace std;
#include "b.h"
int main()
{
b B;
B.putB();
B.ia->putA();
getchar();
return 0;
}