Animal
|
Mammal
/ \
TwoLegged - FourLegged
/ \
Human Lion
我有一个类层次结构,每个类都在自己的头文件中定义。现在当我在同一个位置包含Human.h和Lion.h时,我会得到一个Mammal重新定义的错误。
error C2011: 'Mammal' : 'class' type redefinition
这是因为Mammal.h头文件同时被TwoLegged和OneLegged类调用。
然而,我不确定如何解决头文件中的循环依赖关系,因为我不能改变类层次结构。
有人能帮忙吗?
编辑:
Mammal头文件
#ifndef MAMMAL_H
#define MAMNAL_H
#include "stdafx.h"
#include "Animal.h"
class Mammal : public Animal
{
public:
Mammal::Mammal();
virtual Mammal::~Mammal();
std::string mammal_name();
int mammal_age();
int mammal_expectedlifedays();
bool mammal_hunter();
int mammal_power();
int mammal_birthrate();
bool mammal_alive();
protected:
Mammal::Mammal(const std::string& mname, int mexpectedlifedays, int mage, bool mhunter, int mpower, int mbirthrate, bool malive) : Animal(mname, mexpectedlifedays, mage,mhunter, mpower, mbirthrate, malive)
{}
private:
};
#endif
编译器给出的错误:
error C2011: 'Mammal' : 'class' type redefinition
see declaration of 'Mammal'
error C2504: 'Mammal' : base class undefined
error C2614: 'TwoLegged' : illegal member initialization: 'Mammal' is not a base or member
注意:这不是作业,否则我会标记它的。
提示:该段文本已经是中文,无需翻译。
Mammal.h
中的包含保护可能有问题,或者你实际上在某个地方重新定义了class Mammal
!从你描述的问题来看,没有循环包含(例如,如果Mammal.h
包含Lion.h
,就会是这种情况)。 - Ferdinand Beyer