Ошибка при попытке включить содержимое одного класса в другой
Я еще зеленый новичок, поэтому за ошибки прошу ногами не бить)
Имеется следующий код:
#include <iostream>
#include <Windows.h>
#include<string>
using namespace std;
class State
{
public:
//...
void GetInfoAboutState(){//...}
};
class Society // общество
{
//...
public:
void GetInfoAboutSociety()
{ //... }
};
class Primitive_Society : Society // Так выглядит наследование
{
//...
public:
//...
void GetInfoAboutPrimitiveSociety()
{
GetInfoAboutSociety();
//...
}
//...
};
class Slave_Owning_Society : Primitive_Society
{
protected:
//...
public:
//...
void GetInfoAbouSlaveOwningSociety()
{
GetInfoAboutPrimitiveSociety();
//...
}
};
class Feudal_Society : Slave_Owning_Society
{
protected:
//...
public:
//...
void GetInfoAboutFeudalSociety()
{
GetInfoAbouSlaveOwningSociety();
GetInfoaboutState();
}
};
Задачка такая: нужно в классе Feudal_Society сделать вывод государств (класс State)/
Сделал класс State, не могу через функцию GetInfoaboutState получить нужную информацию.
Компилятор выдает ошибки:
C3861 GetInfoaboutState: идентификатор не найден E0020 идентификатор "GetInfoaboutState" не определен
Что я делаю не так?
Ответы (1 шт):
Закрытое наследование подразумевает, что наследник может использовать все открытые и защищенные члены базового класса, но он не имеет этих членов.
только class Primitive_Society и его друзья могут использовать функции члены закрытого базового класса. В данном случаи Society::GetInfoAboutSociety, поэтому:
void GetInfoAboutPrimitiveSociety()
{
GetInfoAboutSociety();
//...
}
правильная реализация. Но class Slave_Owning_Society : Primitive_Society, и class Feudal_Society : Slave_Owning_Society никак не могут использовать функции_члены закрытого базового класса своих закрытых базовых классов. В частности, Society::GetInfoAboutSociety для них не доступна(закрытый интерфейс).
Обратите внимание на:
- нужно классу просто иметь базу для использования или он должен быть разновидностью базового класса
- качество кода и количество кода для оформления вопроса
Обновление:
Так как Primitive_Society по идее является разновидностью Society, то нужно это выразить кодом именно так, то есть наследование делать открытым:
class Primitive_Society : public Society
тогда класс будет иметь свою собственную GetInfoAboutState и другие члены, унаследованные от базового класса, и проблема отпадет.