c 中头文件重复定义的问题计算机等级考试

文章作者 100test 发表时间 2010:01:01 13:02:55
来源 100Test.Com百考试题网


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

  假设我们有两个类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


相关文章


CPPTemplates之类模板的继承计算机等级考试
BerkeleyDB数据访问算法说明计算机等级考试
对插入排序的改进计算机等级考试
C 模板类继承中诡异的作用域问题计算机等级考试
c 中头文件重复定义的问题计算机等级考试
CPPTemplates之仿函数计算机等级考试
计算机二级C 辅导:打印自身的C++代码计算机等级考试
C VCstrstr函数的仿真计算机等级考试
计算机二级:如何理解c和c 的复杂类型声明计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛