TOP

c++中头文件重复定义的问题
2014-11-18 17:17:35 】 浏览:9828
Tags:文件 重复 定义 问题

  一、同一头文件中类嵌套的疑问


  假设我们有两个类A和B,分别定义在各自的头文件A.h和B.h中,但是在A中要用到B,B中也要用到A,像下面的写法是错误的:


  class B;


  class A


  {


  public:


  B b;


  };


  class B


  {


  public:


  A a;


  };


  因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的。在这里我们只需要把其中的一个A类中的B类型成员改成指针形式 就可以避免这个无限延伸的怪圈了。为什么要更改A而不是B?因为就算你在B中做了类似的动作,也仍然会编译错误,表面上这仅仅上一个先后顺序的问题。


  为什么会这样呢?因C++编译器自上而下编译源文件的时候,对每一个数据的定义,总是需要知道定义的数据的类型的大小。在预先声明语句class B;之后,编译器已经知道B是一个类,但是其中的数据却是未知的,因此B类型的大小也不知道。这样就造成了编译失败,VC++6.0下会得到如下编译错 误:


  error C2079: 'b' uses undefined class 'B'


  将A中的b更改为B指针类型之后,由于在特定的平台上,指针所占的空间是一定的(在Win32平台上是4字节),这样可以通过编译。


  二、不同头文件中的类的嵌套在实际编程中,不同的类一般是放在不同的相互独立的头文件中的,这样两个类在相互引用时又会有不一样的问题。重复编译是问题出现的根本原因。为了保证头文 件仅被编译一次,在C++中常用的办法是使用条件编译命令。


  Example:


  animal.h


  class animal


  {


  ......


  };


  animal.cpp


  #include "animal.h"


  #include


  ......


  fish.h


  #include "animal.h"


  class fish


  {


  ......


  };


  fish.cpp



c++中头文件重复定义的问题 https://www.cppentry.com/bencandy.php?fid=80&id=12989

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇CPPTemplates之仿函数 下一篇C++虚函数及虚函数表解析