zoukankan      html  css  js  c++  java
  • C++两个类相互包含引用的问题

    • 在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类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的指针或引用。
     





  • 相关阅读:
    case when then else end
    spark读文件写入mysql(scala版本)
    mysql语句
    spark读文件写mysql(java版)
    spark的广播变量
    hive,把一个表中计算好的数据,存到另一个外部表中
    spark操作hive方式(scala)
    spark sql启动优化
    hive on spark (spark2.0.0 hive2.3.3)
    hive优化,开启压缩功能
  • 原文地址:https://www.cnblogs.com/fengkang1008/p/4652269.html
Copyright © 2011-2022 走看看