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

来源:互联网 发布:淘宝下单后商品下架了 编辑:程序博客网 时间:2024/06/13 01:57

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

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

#ifndef BH#define BHclass 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 AHclass 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"这时会出现相互包含的问题,相互的定义都无效。

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






原创粉丝点击