解决C++中两个类的头文件互相包含问题

 转载:(134条消息) C++中两个类的头文件互相包含问题_道道道人间道的博客-CSDN博客_c++头文件互相包含

        我们知道,当一个类(设类A)中包含另一个类(设类B)的对象时,必须在该文件中包含另一个类的头文件,如果两个类都互用到了对方的对象,理论上就要互相包含头文件,但是这样是不可取的。贴出代码如下:

//文件A.h中的代码 
02. #pragma once 
03. #include "B.h" 
04. class A 
05. {  
06. public: 
07.         B b;  
08. };  
09.   
10. //文件B.h中的代码 
11. #pragma once 
12. #include "A.h" 
13. class B 
14. {  
15. public: 
16.         A a;  
17. };  

      这样是无法通过编译的,其原因是它们的头文件互相包含了,你包含我,我又包含你,没完没了!为了解决这个问题,只需要去掉一个或则都去掉包含的头文件语句即可,为了要去掉包含的头文件语句,就不能在类中定义另外一个类的对象,而我们却是要在该类中使用另外一个类的对象,那么就可以利用对象的指针,而用对象的指针却可以不用包含头文件,做简单的声明即可。这样就打破了你包含我,我包含你的情况。(当然也可以利用全局对象、类的继承来解决!)根据情况,可以分为是否使用类的对象:(这里使用类的对象是指将对象当作类的成员)

1、如果在A类中使用了B类的对象,那么就必须包含B类的头文件,而B类中就不能使用A类的对象了,这时就可以用对象的指针,用对象的指针,可以作简单的声明即可代替头文件的包含。此类情况的代码如下:

<pre name="code" class="cpp">//文件A.h中的代码 
02. #pragma once 
03. #include "B.h"         //使用了B类的对象,所以要包含头文件
04. 
05.   
06. class A 
07. {  
08. public: 
09.         B b; 	     ///
10. };  
11.   
12. //文件B.h中的代码 
13. #pragma once 
14.  
15. class A;	//使用了A类对象的指针,只做简单的声明即可
16.   
17. class B 
18. {  
19. public: 
20.         A* a; /
21. };  

       最后应该注意,B类中使用的是指针,所以使用前必须先初始化,让其指向一个存在的对象;

另外,为了通过指针使用A类的成员函数,那么就在B类的源文件中加上包含A类的头文件语句。

2、两个类中互相使用了对方的指针,这样的情况很简单,分别在各自的头文件中声明一下使用的类,而在各自的源文件中包含对方的头文件即可。(也可以根据情况1来解决)这样就有效解决了头文件互相包含的问题。

参考资料:http://blog.sina.com.cn/s/blog_6e04a8350100sonp.html

解决头文件相互包含问题的方法_yang_lang的博客-CSDN博客

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值