У меня есть один базовый класс/родительский класс: PersonКласса ошибка наследования: Частный член
И два подклассы/дочерние классы: Игрок, тренер
Это то, что заголовок для лица, внешнего вида базового класса как:
class Person
{
public:
Person(string name);
Person();
virtual ~Person();
string getName();
void setName(string name);
virtual void printSpec() const = 0;
private:
string name;
};
Я пытался скомпилировать и запустить, он начал жаловаться на это:
include\Person.h||In constructor 'Coach::Coach(std::string, std::string)':|
include\Person.h|19|error: 'std::string Person::name' is private|
\src\Coach.cpp|5|error: within this context|
||=== Build finished: 2 errors, 0 warnings ===|
И указал на это:
private:
string name;
В контексте одной из двух конструкторов для класса ребенка «Тренер»:
Coach::Coach(string name, string responsibility): Person(name){
this->name = name;
this->responsibility = responsibility;
}
Однако это не делает ту же жалобу о том, что очень той же строкой в конструкторе класса «Player», только жалуется на то, что «имя строки является частным членом» в конструкторе класса «Coach».
Я искал некоторые решения для других людей, попробовал защищенные вместо частных, попытался изменить имена переменных, но бесполезно.
Что дает?
Если вы уже звонившего (имя) в конструкторе тренер, почему вам необходимо установить this-> имя вообще? Я предполагаю, что Person :: Person позаботится об этом? В любом случае защищенная область действия должна работать. – Vivek
Получите [приличную книгу на C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). 'Player :: name' является закрытым. если вы хотите, чтобы производные классы имели доступ на уровне членов (и в этом случае нет оснований, но это другое дело), он должен быть * protected * или * public * или * friend * -ed (последний очень необычен для производные классы). – WhozCraig
Как вы объявляете класс тренера? (Не забудьте также использовать общедоступное слово) – doctorlove