计算机二级辅导:c++中头文件重复定义的问题
来源:优易学  2010-1-14 18:56:49   【优易学:中国教育考试门户网】   资料下载   IT书店

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

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

  ......

  fish.h

  #include "animal.h"

  class fish

  {

  ......

  };

  fish.cpp

  #include "fish.h"

  #include <iostream.h>

  ......

  main.cpp

[1] [2] [3] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训