先来看一个例子
在fish.h文件中有
#include"animal.h" //fish类是从animal类中继承而来,所以要包含animal.h头文件
class fish:public animal
{
public:
void breach();
....... //省略
}
在ex10.cpp文件中有 主函数在ex10.cpp文件中
#include"animal.h"
#include"fish.h"
...............//省略
程序在编译时就会出错,因为在编译ex10.cpp时,文件中包含animal.h头文件,编译器展开他知道animal类定义了,又展开fish.h都文件,fish.h又包含animal.h,又定义了animal.h,重复定义了,所以报错了。
为了防止重复包含,修改如下:
在animal.h中加入
#ifndef ANIMAL_H_H
#define ANIMAL_H_H
.................//省略代码
#endif
在fish.h中加入
#ifndef FISH_H_H
#define FISH_H_H
................//省略代码
#endif
这样就能防止重复包含了,当编译器第一次展开animal.h时,条件预处理指令判断ANIMAL_H_H没有定义,就定义了他,然后继续执行下面的代码。接着展开fish.h头文件,而在fish.h头文件中也包含了animal.h,再次展开,发现ANIMAL_H_H已经定义,于是直接跳到#endif,执行结束。防止了重复定义。