Я пытаюсь написать программу с четырьмя классами: автомобиль, автомобиль, самолет и летающий автомобиль.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*);
};
Кроме того, исходные файлы для каждого класса включают связанные заголовочные файлы (поэтому thart 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