头文件相互包含与前置声明

     在做项目过程中遇到头文件相互包含的问题,大致情况如下:

      Tree.h

     #ifndef TREE_H

    #def TREE_H

     #include "Dialog.h"

    class Tree

   {

       Tree();

       ~Tree();

             ...

      void  callDialog();

   };

  #endif


   Tree.cpp

   #include "Tree.h"

              ...

   void Tree::callDialog()

    {

        Dialog *dlg = new Dialog();

           ....

    }

             ....


  Dialog.h

  #ifndef DIALOG_H

 #def DIALOG_H

  #include "Tree.h"

  class Dialog

   {

         Dialog(Tree *tree);

          ...

   };

#endif


  Dialog.cpp

  #include "Dialog.h"

  Dialog::Dialog(Tree *tree)

 {

      ...

       tree->leaf();

       ...

 }

 在编译的过程中提示Dialog.h中Tree未声明,分析发现头文件相互包含,在Dialog.h中包含了Tree.h,而Tree.h中包含了Dialog.h,因为头文件进行了#ifndef ... #def ... #endif的设置,推测到Tree.h中的#include"Dialog.h"时便不再包含。要解决问题可以在Dialog.h中加上前置声明class Tree,当然还不能将#include "Tree.h"去掉,因为在Dialog.cpp中有对class Tree的成员函数进行调用。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值