无法访问类中声明的私有成员

Nog*_*gaz 1 c++ constructor class constructorargument

这是我在这里的第一个问题:)我有一点问题..这些是我的课程:

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();
};
Run Code Online (Sandbox Code Playgroud)

我也有一个功能多人游戏,我尝试使用构造函数与参数:

void multiplayer(){
    Osoba gracz1('O');
    Osoba gracz2('X');
...
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

错误是一样的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'
Run Code Online (Sandbox Code Playgroud)

riv*_*riv 7

派生类无法访问父类的私有成员.你可以将它们声明为protected(它们是私有的,但允许派生类访问它),但在你的情况下,因为Gracz提供了一种初始化变量的方法,你应该让Osoba参数传递给Gracz构造函数.

Osoba(char znak)
    : Gracz(znak) // initializes parent class
{}
Run Code Online (Sandbox Code Playgroud)


Mik*_*ran 5

private成员访问权限仅适用于班级成员和朋友.你在找什么为它申报char znak_graczaprotected,使继承的类Gracz可以访问该成员为好.

你的班级Gracz看起来应该更像这样:

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