头文件互相包含问题

     在C++中,关于CPP的头文件互相包含的问题很让人头疼,其实我们谁也不愿意弄的结构混乱,难以理解,但有时又是有必须的。

     假定当前有两个头文件分别为 A.h  和 B.h,内容分别如下:

     A.h内容为:

     #ifndef  _A_H_

     #define _A_H_    

     #endif

 

     #include "B.h"

     class A

     {

          public:

          B  cl_b;

      };

 

    

     B.h内容为:

     #ifndef  _B_H_

     #define _B_H_    

     #endif

 

     #include "A.h"

     class B

     {

          public:

          A  cl_a;

      };

 

      编写相应的A.cpp和B.cpp,并编译,发现有错误提示,大意为类型不能找到。为何会出现这种情况?我们知道,C++编译器在编译源文件时采用的是预编译原则,对每一个数据总是需要知道其类型及大小。在A对象中要分配一块属于B的空间,而B中又有A的空间,是一个逻辑错误,因为在未完成预编译的情况下无法预知数据所占用的空间大小。

     

     根据指针的特点,指针在定义后并没有占用实际的内存空间,同时我们使用预先声明的方法,在VC编译环境下做如下修改:

     A.h内容为:

     #pragma once 

 

     #include "B.h"

 

     class B;

     class A

     {

          public:

          B  *cl_b;

      };

 

    

     B.h内容为:

     #pragma once 

 

     #include "A.h"

 

     class A;

     class B

     {

          public:

          A  *cl_a;

      };

 

      重新编译,OK,编译通过。我们发现,前置的声明还是很有用的,而此种情况下的宏定义却不能解决我们的问题。

 

      也看了不少的文章建议头文件的包含应该尽量放在.cpp当中,个人认为还是要从实际的情况来看,如果需要嵌套包含的类,其某些方法经常的被调用,就不适合在.cpp中临时创建、销毁类对象,因为这种反复的创建、销毁类对象,对系统资源是非常浪费的。

    

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值