A.h文件
class A
{
public:void methodA();
...
};
B.h文件
class B
{
public:void methodB();
...
}
现在是再类A中要调用类B中的方法,类B中有要调用类A中的方法!
试验过的失败方法:
方法1:
A.h文件
#include "B.h"
class B;
class A
{
private:B m_classB;
public:void methodA();
...
};
B.h文件:
#include"A.h"
class B
{
private:A m_classA;
public:void methodB();
...
};
导致死循环。
可能原因:构造A时,需要先构造B;而构造B时又需要先构造A,导致死循环;
方法2:
A.h文件
#include "B.h"
class B;
class A
{
private:B *m_pClassB;
public:void methodA();
...
};
B.h文件:
#include"A.h"
class B
{
private:A *m_pClassA;
public:void methodB();
...
};
然后分别在A.cpp中的类A构造函数中加上:m_pClassB = new class B;
在B.cpp中的类B构造函数中加上:m_pClassA = new Class A;
可能原因:同方法1。
方法3:
A.h文件
#include "B.h"
class B;
class A
{
friend class B;
private:B *m_pClassB;
public:void methodA();
...
};
B.h文件:
#include"A.h"
class B
{
private:A *m_pClassA;
public:void methodB();
...
};
然后分别在A.cpp中的类A构造函数中加上:m_pClassB = new class B;
在B.cpp中的类B构造函数中加上:m_pClassA = new Class A;
出现的结果和原因同上。
正确的方法:
A.h文件
#include "B.h"
class B;
class A
{
friend class B;
private:B *m_pClassB;
public:void methodA();
...
};
B.h文件:
#include"A.h"
class B
{
public:A *m_pClassA;
public:void methodB();
...
};
然后分别在A.cpp中的类A构造函数中加上:m_pClassB = new class B;m_pClassB->m_pClassA = this;
在B.cpp中的类B构造函数中加上:m_pClassA = new Class A;