C++中两个类的头文件互相包含问题
2014-08-13 21:12
274 查看
我们知道,当一个类(设类A)中包含另一个类(设类B)的对象时,必须在该文件中包含另一个类的头文件,如果两个类都互用到了对方的对象,理论上就要互相包含头文件,但是这样是不可取的。贴出代码如下:
这样是无法通过编译的,其原因是它们的头文件互相包含了,你包含我,我又包含你,没完没了!
为了解决这个问题,只需要去掉一个或则都去掉包含的头文件语句即可,为了要去掉包含的头文件
语句,就不能在类中定义另外一个类的对象,而我们却是要在该类中使用另外一个类的对象,那么
就可以利用对象的指针,而用对象的指针却可以不用包含头文件,做简单的声明即可。这样就打破
了你包含我,我包含你的情况。(当然也可以利用全局对象、类的继承来解决!)
根据情况,可以分为是否使用类的对象:(这里使用类的对象是指将对象当作类的成员)
1、如果在A类中使用了B类的对象,那么就必须包含B类的头文件,而B类中就不能使用A类的对象了,
这时就可以用对象的指针,用对象的指针,可以作简单的声明即可代替头文件的包含。此类情况的
代码如下:
最后应该注意,B类中使用的是指针,所以使用前必须先初始化,让其指向一个存在的对象;
另外,为了通过指针使用A类的成员函数,那么就在B类的源文件中加上包含A类的头文件语句。
2、两个类中互相使用了对方的指针,这样的情况很简单,分别在各自的头文件中声明一下使用的类,
而在各自的源文件中包含对方的头文件即可。(也可以根据情况1来解决)
这样就有效解决了头文件互相包含的问题。
参考资料:http://blog.sina.com.cn/s/blog_6e04a8350100sonp.html
/article/10754681.html
//文件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
/article/10754681.html
相关文章推荐
- C++中两个类中互相包含对方对象的指针问题(转载)
- C++中两个类中互相包含对方对象的指针问题
- c++中两个类的头文件互相包含编译出错的解决办法
- c++ 学习笔记(47)-C++中两个类中互相包含对方对象的指针问题
- C++头文件的重定义问题以及头文件互相包含问题
- 类声明,解决c++两个类互相包含问题
- C++头文件的包含顺序问题
- 关于c c++ 混编包含的头文件出现的问题
- C++中两个类相互包含引用问题
- C++两个类相互包含引用的问题
- 关于C++中的头文件互相包含
- C++中两个类相互包含引用问题
- C++中两个类相互包含引用问题
- 回调函数——一个化解C++互相包含头文件问题的方法
- c++中两个类相互包含引用的相关问题
- C++中两个类相互包含引用问题
- 关于C++的头文件互相包含的问题
- C++中两个类互相包含的策略
- 关于C++头文件的包含顺序问题
- c++中两个类相互包含引用的相关问题