c++ 两个类互相引用的问题

现在有两个类要相互应用时,会出现各种各样的问题,首先看第一个例子:

#ifndef AH
#define AH
class B;
class A {
    B *memb;
    A() {
         
    }
    ~A() {
        delete memb;
    }
};
#endif
头文件A.h包含class A如上:

#ifndef BH
#define BH
class B {
     
};
#endif
头文件B.h包含classB

此时编译就会产生类似上面的警告信息:warning C4150: 删除指向不完整“B”类型的指针;没有调用析构函数

此时因为在class A 中的B 的声明是依赖B的前置声明,而不是#include"b.h"所以,B对A来说是不可见的,因此无法调用析构函数。


如果这时class A 和class B相互应用对象:如下代码:

A.h

#ifndef AH
#define AH
class B;
class A {
    B b;
};
#endif



B.h

#ifndef BH
#define BH
#include "A.h"
class B {
    A a;
};
#endif
B 对于A来说还是不可见的,所以定义会报错;即使在A.h中包含#include"b.h"这时会出现相互包含的问题,相互的定义都无效。

此种状况的解决利用前置声明定义的那个类中的保持另外一个类的引用定义为指针,定义指针时不需要对那个类的定义可见






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值