[英]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');
...
}
但這不起作用。
gracz1
和gracz2
錯誤相同
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.