[C/C++](Class include each other)




A class -> A Include B-> 进入B class -> B include A -> A class

(如下代码)

A.h

#ifndef A_H
#define A_H

#include "B.h"

class A
{
public:
	A(void);
	~A(void);
private:
	B b;
};

#endif

B.h

#ifndef B_H
#define B_H

#include "A.h"

class B
{
public:
	B(void);
	~B(void);
private:
	A *a; 
};

#endif

问题迎來,编译时编译A头文件,此时发现include B,便跳至B,却又发现B有include A,再次跳回A时,却会因为A先编译时,因为有加入#ifndef A_H与#define A_H的关系,定义过A_H,便不会再往下编译A class,因此而又跳回B,造成B不认识A Class而在编译时出错。

但是,其实我们的B Class只是知道A(pointer)而已,根本不需要include A.h

解決方式一


我们可以通过前至宣告的方式来告诉编译器「先知道这个class的存在,至于他的定义后面会说明」。

只要不涉及生成或操作的话,前至宣告可以用在參考类。

然后再.cpp实际操作时,在include 类头文件:

A.h

#ifndef A_H
#define A_H

#include "B.h"

class A
{
public:
	A(void);
	~A(void);
private:
	B b;
};

#endif

A.cpp

#include "A.h"


A::A(void)
{
}


A::~A(void)
{
}

B类稍微修改一下:

B.h

#ifndef B_H
#define B_H

class A;

class B
{
public:
	B(void);
	~B(void);
private:
	A *a; 
};

#endif

在cpp中,我们在来incldue A.h头文件

B.cpp

#include "B.h"
#include "A.h"

B::B(void)
{
}


B::~B(void)
{
}

以上的原因与解決方式,希望可以帮助到遇到此问题的人可以解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值