其实这个问题应该算是C++中比较常见的一个问题了,就是C++中两个类相互包含,如果都在各自的类的头文件中包含对方,肯定会报错。最近就遇到了这个问题,最后在网络上找到了解决的办法。解决的办法如下:
假如有A和B两个类,分别对应的头文件为A.h,B.h和源文件A.cpp和B.cpp。
则在A的头文件(A.h)中包含B的头文件(B.h),在A的源文件(A.cpp)中包含(A.h),在B的头文件中使用A的声明(class A;)而不是包含A的头文件,然后在B的源文件(B.cpp)中包含A的头文件和B的头文件。代码如下:
// A.h
#include "B.h"
class A
{
public:
A(B* pB):m_pB(pB) {}
void useB();
private:
B* m_pB;
};
//A.cpp
#include "A.h"
void A::useB()
{
//do something for m_pB
}
//B.h
class A;
class B
{
public:
B(A* pA):m_pA(pA) {}
void useA();
private:
A* m_pA;
};
//B.cpp
#include "A.h"
#include "B.h"
void B::useA()
{
//do something for m_pA
}