2

基本クラス/親クラスが 1 つあります: Person

2 つのサブクラス/子クラス: Player、Coach

基本クラス 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」の 2 つのコンストラクターのうちの 1 つのコンテキストでは、次のようになります。

Coach::Coach(string name, string responsibility): Person(name){
    this->name = name;
    this->responsibility = responsibility;
}

ただし、「Player」クラスのコンストラクターの同じ行について同じ苦情を言うのではなく、「Coach」クラスのコンストラクターの「文字列名がプライベートメンバーである」ということだけを訴えます。

私は他の人のためにいくつかの解決策を調べ、プライベートではなく保護を試み、変数の名前を変更しようとしましたが、役に立ちませんでした。

何を与える?

4

3 に答える 3

1

Change "private" to "protected" private means no other part of the system, including derived classes, can access the member.

于 2013-08-27T15:36:21.670 に答える