Не допускается преобразование в недоступный базовый класс Person, что делать?
Не допускается преобразование в недоступный базовый класс Person, что делать?
ссылка на прошлый вопрос, связанный с данной темой: Не совсем понимаю, как должны прописываться классы-группы?
new Soldier создается в классе-группе first Вот иерархия классов:
first.h:
#pragma once
#include "Division.h"
class first : public Division
{
public:
first(string Name);
~first();
void build();
void Show();
};
first.cpp:
#include "first.h"
#include "Soldier.h"
first::first(string Name) : Division(name)
{
name = Name;
}
first::~first()
{
}
void first::build()
{
_persons.push_back(new Soldier);
_persons.push_back(new Soldier);
}
void first::Show()
{
cout << "Division: " << name << endl;
for (auto person : _persons)
person->Show();
}
person.h:
#pragma once
#include "Object.h"
#include <iostream>
#include <cstring>
using namespace std;
class Person : public Object
{
protected:
string name;
public:
Person();
Person(string name);
~Person();
virtual void show();
};
Soldier.h:
#pragma once
#include "Person.h"
class Soldier : protected Person
{
public:
Soldier();
Soldier(string Name);
~Soldier();
};
Division.h:
#pragma once
#include "Object.h"
#include "Person.h"
#include <list>
#include "Soldier.h"
class Division : public Object
{
protected:
string name;
list<Person*> _persons;
public:
Division(string Name);
Division(Division&);
~Division();
void addPerson(Person* p);
virtual void Show() = 0;
virtual void build() = 0;
};
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
У вас ошибка, которая присутствовала и в прошлом посте
class Soldier : protected Person
вы с private/protected/public немного перемудрили - у вас паблик метод кочует в протектед в родителе, а в дочернем он опять в публичном :)
если сделать
class Soldier : public Person
то все заработает
P.S.
и еще определитесь с методами - у вас show или Show

