Не допускается преобразование в недоступный базовый класс 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

→ Ссылка