簡體   English   中英

無法訪問在課堂上聲明的私人成員

[英]cannot access private member declared in class

這是我在這里的第一個問題:)我有點問題..這些是我的課程:

class Gracz{
    char znak_gracza;
public:
    Gracz();
    Gracz(char znak){
            this->znak_gracza = znak;
        };
    friend void multiplayer();
};
class Osoba: public Gracz{
public:
    Osoba();
    Osoba(char znak){
            this->znak_gracza = znak;
        };
    friend void multiplayer();
};

我也有一個多人游戲功能,在這里我嘗試使用帶參數的構造函數:

void multiplayer(){
    Osoba gracz1('O');
    Osoba gracz2('X');
...
}

但這不起作用。

gracz1gracz2錯誤相同

error C2248: 'Gracz::znak_gracza' : cannot access private member declared in class 'Gracz'
see declaration of 'Gracz::znak_gracza'
see declaration of 'Gracz'

派生類無法訪問父類的私有成員。 您可以將它們聲明為protected (就像私有的一樣,但是允許派生類訪問它),但是在您的情況下,由於Gracz提供了一種初始化變量的方法,因此您只需要讓Osoba將參數傳遞給Gracz構造函數即可。

Osoba(char znak)
    : Gracz(znak) // initializes parent class
{}

private成員訪問權限僅適用於班級成員和朋友。 您正在尋找將char znak_gracza聲明為protected ,因此繼承Gracz類也可以訪問該成員。

您的班級Gracz應該看起來像這樣:

class Gracz{
protected:
    char znak_gracza;
public:
    Gracz();
    Gracz(char znak){
            this->znak_gracza = znak;
        };
    friend void multiplayer();
};

構造函數需要將參數傳遞給基類構造函數:

class Osoba: public Gracz{
public:
    //...
    Osoba(char znak) :
    Gracz(znak) {
    }

};

multiplayer功能是Gracz類的朋友,但Osoba類不是。

請記住,子類不能自動訪問父類的私有變量。 如果您希望Osoba訪問znak_gracza變量,則必須對其進行protected

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM