//'class'type redefinition
#ifndef ANIMAL_H_H
#define ANIMAL_H_H
class animal
{
public:
animal();
~animal();
void eat();
void sleep();
virtual void breathe();
};
#endif
原因,当编译器编译X03.CPP文件时,因为在文件中包含了animal.h头文件,编译器展开这个头文件,知道animal这个类定义了,接着展开fish.h头文件,而在fish.h头文件中也包含了animal.h,再次展开animal.h,于是animal这个类就重复定义了。
我们一般用#define定义一个宏,是为了在程序中使用,是程序更加简洁,维护更加方便,然而在此处,我们只是为了判断ANIMAL_H_H是否定义,以此来避免类重复定义,因此我们没有为其定义某个具体的值。在选择宏名时,要选用一些不常用的名字,因为我们的程序经常会跟别人写的程序集成,如果选用一个很常用的名字(例如:X),有可能会造成一些不必要的错误。