我正在尝试编写一个四类课程:车辆,汽车,飞机和飞行汽车。C++多重继承和虚拟类
飞行汽车继承汽车和飞机,汽车和飞机都从车辆继承。
vehicle.h
class vehicle
{
public:
vehicle();
vehicle(char*, int, char*);
virtual void setmodel(char*);
//more functions..
~vehicle();
protected:
char* model;
int speed;
char* color;
};
car.h
#include "vehicle.h"
class car:public virtual vehicle
{
public:
car();
car(char*, int, char*);
void driving(std::ostream&);
};
airplane.h
#include "vehicle.h"
class airplane:public virtual vehicle
{
public:
airplane();
airplane(char*, int, char*);
void flying(std::ostream&);
};
flyingCar.h
#include "car.h"
#include "airplane.h"
class flyingCar: public car, public airplane
{
public:
flyingCar();
flyingCar(char*, int, char*);
};
另外,每个类的源文件都包含相关的头文件(因此,vehicle.cpp
包括vehicle.h
,car.cpp
包括car.h
等等..)。
主要功能包括vehicles.h
标题和ifndef..
。
当我编译我car.h中重新定义类车辆时出现错误,但因为我已经使用了virtual
我不明白我怎么能解决这个问题。
我怀疑在类源文件中包含类头文件可能不正确,因为继承头文件已包含在继承头文件本身中,但如果我不在这里包含它们,编译器将不会引用类原型。作为一个尝试,我把所有内容都包含在ifndef..
中,但没有任何结果。
@CoryKramer然后代码会受到菱形继承问题。见http://www.cprogramming.com/tutorial/virtual_inheritance.html – Daniel
@丹尼尔你是对的! – CoryKramer
@πάνταῥεῖ更准确,谢谢。 (如果你正在寻找标准搜索,仍然很难找到这个问题), – maja