版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LittleLittleFish_xyg/article/details/82995180
两个类相互包含类的指针问题
两个类相互包含对方指针现象
在工程当中经常遇到一个现象,A类包含B类的指针,同时B类也包含A类的指针,代码写好了,发现编译就是通不过,如以下代码:
//----------A.h
#include "B.h"
class A
{
public:
private:
B*m_bMember;
}
//---------A.cpp
// 使用m_bMember进行相关操作
//-------B.h
#include "A.h"
class B
{
public:
private:
A*m_aMember;
}
//--------B.cpp
// 使用m_aMember进行相关操作
编译结果为:error C2143: 语法错误: 缺少“;”(在“*”的前面)
出现这个现象的原因
其实出现这个问题的原因是这样的:编译A类时候(此处A和B不分先后,具体看你自己的调用情况),还没走到class A这一步,先进入include B.h,先编译B类,当走到Am_aMember;时,还没有找到A类的定义,所以出现error C2143: 语法错误: 缺少“;”(在“”的前面),即找不到A的声明。
如何处理这个问题
处理方法为,在其中一个类中作如下修改(此处选择B类):
1、删除B.h中的#include A.h
2、B.h中添加class A;前置声明,告诉编译器这个是类
3、在B.cpp中添加#include A.h
编译通过,修改后代码如下
//----------A.h
#include "B.h"
class A
{
public:
private:
B*m_bMember;
}
//---------A.cpp
// 使用m_bMember进行相关操作
//-------B.h
class A;
class B
{
public:
private:
A*m_aMember;
}
//--------B.cpp
#include "A.h"
// 使用m_aMember进行相关操作