SCloudQ Ответов: 2

Как правильно наследовать от базового класса?


У меня есть класс называемый Воздушное судно Я хотел бы установить его так, чтобы он имел производный класс называемый fixedWing. Тогда я хотел бы, чтобы fixedWing класс, чтобы иметь 3 подклассы; Первый вызванный Планер, второй называется Реактивный самолет и третий позвал: Пропеллеры.

Я получаю следующие ошибки:

fixedwing.h(11): ошибка C2504: 'самолет': базовый класс не определен
fixedwing.h(35): предупреждение C4584: 'пропеллер': базовый класс 'FixedWing' уже является базовым классом 'Jet'
fixedwing.h(10): Примечание: см. объявление "FixedWing"
fixedwing.h(26): Примечание: см. объявление 'Jet'

Что я уже пробовал:

Самолета.ч
#pragma once

#include "stdafx.h"
#include "FixedWing.h"
#include <string>
#include <iostream>
#include <fstream>
using namespace std;

class Aircraft;

class Aircraft{
	int regNo;
	string manufacturer;
	string serialNo;
	string productionDate;
	string owner;
	string annualInspection;
	int minSpeed;
	int maxSpeed;
	int maxClimbRate;
public:
	Aircraft(); // default construct
	Aircraft(int); 
};


FixedWing.ч
#pragma once

#include "stdafx.h"
#include "Aircraft.h"
#include <string>

using namespace std;

// Fixed Wing class derived from Aircraft 
class FixedWing : public Aircraft
{
public:
	FixedWing();
	//FixedWing(int regNo);
};

// (sub#1) Gliders to fixed wing
class Glider : public FixedWing 
{
public:
	Glider();
private:
};

// (sub#2) Jets to fixed wing
class Jet : public FixedWing 
{
public:
private:
	int hoursInOperation;
};

// (sub#3) Propellers to fixed wing
class Propeller : Jet,FixedWing 
{
public:
private:
	int hoursInOperation;
};


Я чувствую, что решение смотрит мне прямо в лицо, но я просто не могу его найти. Может ли кто-нибудь помочь мне?

Заранее большое спасибо!

2 Ответов

Рейтинг:
7

Jochen Arndt

Снять включение FixedWing.ч в Самолета.ч.

Это и есть источник вашей проблемы, потому что FixedWing определение так обрабатывается перед тем, как Aircraft определение.

Также нет необходимости включать этот файл, потому что FixedWing не упоминается в Самолета.ч.


Рейтинг:
13

KarstenK

Проблема в том, что в заголовке вашего самолета включен заголовок FixedWing. Это не сработает. Вам не нужен этот заголовок сейчас в вашем классе. Мой опыт показывает, что эта циклическая ссылка является признаком плохой архитектуры класса.

Множественное наследование-это не очень хорошая идея, подумайте об этом межфазные границы.