两个类的互相包含问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 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进行相关操作

猜你喜欢

转载自blog.csdn.net/LittleLittleFish_xyg/article/details/82995180