#include "fish.h"
#include <iostream.h>
......
main.cpp
#include "animal.h"
#include "fish.h"
void main()
{
......
}
编译文件,会出现class type redefinition的错误
为什么会出现类重复定义的错误呢?请读者仔细查看EX10.cpp文件,在这个文件中包含了animal.h和fish.h这两个头文件。当编译器编译EX10.cpp文件时,因为在文件中包含了animal.h头文件,编译器展开这个头文件,知道animal这个类定义了,接着展开fish.h 头文件,而在fish.h头文件中也包含了animal.h,再次展开animal.h,于是animal这个类就重复定义了。
要解决头文件重复包含的问题,可以使用条件预处理指令。
修改后的头文件如下:
animal.h
#ifndef ANIMAL_H_H
#define ANIMAL_H_H
class animal
{
......
};
#endif
fish.h
#include "animal.h"
#ifndef FISH_H_H
#define FISH_H_H
class fish
{
......
};
#endif
我们再看EX10.cpp的编译过程。当编译器展开animal.h头文件时,条件预处理指令判断ANIMAL_H_H没有定义,于是就定 义它,然后继续执行,定义了animal这个类;接着展开fish.h头文件,而在fish.h头文件中也包含了animal.h,再次展开 animal.h,这个时候条件预处理指令发现ANIMAL_H_H已经定义,于是跳转到#endif,执行结束。