首页 > 编程语言 > 详细

C++两个类相互包含引用的问题

时间:2015-07-16 21:38:18      阅读:453      评论:0      收藏:0      [点我收藏+]
  • 在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型
  1. class A
  2. {
  3. B b;
  4. }
  5. class B
  6. {
  7. A* a;
  8. }
  • 请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即如下的样子:
  1. class A
  2. {
  3. B b;
  4. }
  5. class B
  6. {
  7. A a;
  8. }
  • 编译器在声明A的时候,由于B的声明在A的下面所以出现编译错误
  • 那么,在定义时因为相互引用肯定会需要相互包含头文件,如果仅仅只是在各自的头文件中包含对方的头文件,是通不过编译的,如下:
  1. //class A.h
  2. #include "B.h"
  3. class A
  4. {
  5. B b;
  6. }
  7. //class B.h
  8. #include "A.h"
  9. class B
  10. {
  11. A *a;
  12. }
如上的包含方式可能会造成编译器有错误提示:A.h文件中使用了示知类型B。
怎么办?
一般的做法是:两个类的头文件之中,选一个包含另一个类的头文件,但另一个头文件中只能采用class *;的申明形式,而在实现文件中(*.cpp)中包含头文件,如下:

  1. //class A.h
  2. #include "B.h"
  3. class A
  4. {
  5. B b;
  6. }
  7. //class B.h
  8. class A;
  9. class B
  10. {
  11. A *a;
  12. }
  13. //B.cpp
  14. //在B.cpp中的文件包含处要有下面语句,否则不能调用成员a的任何内容
  15. #include "A.h"
  16. B::B()
  17. {
  18. ……
  19. }
而且,在B.h中,由于是采用的class A;进行声明的方式,所以在class B的声明中只能定义A的指针或引用。





C++两个类相互包含引用的问题

原文:http://www.cnblogs.com/fengkang1008/p/4652269.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!