关于头文件的包含的问题,请讨论!
我在对一个大的图形系统进行升级,这个程序原来是由公司里的高手们写的,现在到了我的手上,对其中复杂的文件包含关系搞的晕头转向,程序中多处用到
#include "头文件名" 和class 类名;对于他们都起到什么作用?文件包含中有什么技巧?请高手发表你的高论!!
问题点数:100、回复次数:10Top
1 楼tony1978(突击召唤师)回复于 2002-04-22 15:59:14 得分 20
尽量不要在头文件中包含头文件
class 类名;是声明,即说明类名是一个类的名字,这样在这个头文件中,可以用这个类名来定义指针了。在实现文件中要包含那个类的头文件。Top
2 楼opentuxedo(借哥哥的号来试试)回复于 2002-04-22 16:08:24 得分 30
要明白这个问题你最好知道编译链接的过程,看一看nmake是怎么工作的你就明白什么地方必须包含头文件,什么是方只是预声明一下就可以了。刚才UP说的对要尽量让各个文件独立,所以尽可能不让头文件包含头文件,这样就可能造成编译器找不到类型,你可以用class xxx在找不到的地方先声明一下。而不用真正的把类包含进来。Top
3 楼geni3000(建筑工)回复于 2002-04-22 16:09:04 得分 0
按照这位大哥的说法是:
在头文件中用到其它类时用class 类名;这样在类声明中就可以用这个类来定义指针(能定义对象吗?)。
在实现文件中在对头文件进行包含,这样就避免了重复包含的问题了。
Top
4 楼iceneve(暗星云)回复于 2002-04-22 16:17:10 得分 20
假定有
a.h,a.cpp (class a)
b.h,b.cpp (class b)
当class a要使用class b来定义对象时即:
class a
{
...
b bb;
...
};
有两种方式通过编译。
1。在a.h中#include "b.h"
2。在a.h中声明class b;,然后在a.cpp中#include "b.h"
第一种情况下:当class b的部分接口改变时(b.h被修改),vc编译器会重新编译
class a 和 class b;
第二种情况下则不会。
其实这两种方式作用是相同的。Top
5 楼iceneve(暗星云)回复于 2002-04-22 16:19:39 得分 10
避免预编译循环(即重复包含)的方法是:
#ifndef _XXXX
#define _XXXX
class name
......
#endifTop
6 楼qzebra(妖怪)回复于 2002-04-22 16:45:54 得分 10
多看看有关预编译的资料Top
7 楼iceneve(暗星云)回复于 2002-04-22 16:52:21 得分 10
sorry!
纠正一下。
class 类名;是声明,即说明类名是一个类的名字,这样在这个头文件中,可以用这个类名来定义指针,但不能用来定义对象。Top
8 楼geni3000(建筑工)回复于 2002-04-22 16:59:51 得分 0
请问,在什么时候必须使用#include “”?
我发现类作为基类、声明成员变量(非指针)时用class 类名;不行对吗?
Top
9 楼quengzi(Hades)回复于 2002-04-22 17:13:49 得分 0
kkkTop
10 楼geni3000(建筑工)回复于 2002-04-22 17:45:58 得分 0
谢谢各位的支持,多劳多得!Top




