解决C/C++ 头文件相互包含 问题的方法

http://blog.sina.com.cn/s/blog_6ef9a3ad0101emuw.html

http://blog.csdn.net/hazir/article/details/38600419

所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。

类A和类B需要彼此互相引用,这样必然有一个类会先被定义,而另外一个类后被定义,这样在
先被定义的类引用后被定义的类的时候,就导致了所谓的超前引用。


超前引用导致的错误有以下几种处理办法:
 
1)使用类声明
  在超前引用一个类之前,首先用一个特殊的语句说明该标识符是一个类名,即将被超前引用。其使用方法是:
          a)  用class ClassB;声明即将超前引用的类名
          b)  定义class ClassA
          c)  定义class ClassB;
          d)  编制两个类的实现代码。
   上述方法适用于所有代码在同一个文件中。一般情况下,ClassA和ClassB分别有自己的头文件和cpp文件,这种方法需要演变成:
          a) 分别定义ClassA和ClassB,并在cpp文件中实现之
          b) 在两个头文件的开头分别用class ClassB;和class ClassA;声明对方
          c) 在两个cpp文件中分别包含另外一个类的头文件
    NOTE:这种方法切记不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针。  

  
  
2)使用全局变量
   由于全局变量可以避免超前引用,不用赘述。我的习惯是,把类对象的extern语句加在该类头文件的最后,大家喜欢怎样写那都没有什么大问题,关键是保证不要在头文件中胡乱包含。


  
3)使用基类指针。
   这种方法是在引用超前引用类的地方一律用基类指针。而一般情况下,两个互相引用的类并不涉及其基类,因此不会造成超前引用。以开始的例子说:在CMyDialog类中用CView*代替CMyView*,在CMyView类中用CDialog*代替CMyDialog*,这样必然不会造成超前引用。

   说明:本文中,为了叙述方便,把class AClass;语句成为类AClass的声明,把classAClass开始的对AClass的类成员变量、成员函数原型等的说明称为类的定义,而把在CPP中的部分称为类的定义。如果大家对这三个词有不同的理解,请按照自己的本意
把这三个词换成相应的词来理解。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值