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

C++ 无法访问类中声明的私有成员,c++,class,constructor,constructorargument,C++,Class,Constructor,Constructorargument,这是我在这里的第一个问题: 我有个小问题。。 这些是我的课程: class Gracz{ char znak_gracza; public: Gracz(); Gracz(char znak){ this->znak_gracza = znak; }; friend void multiplayer(); }; class Osoba: public Gracz{ public: Osoba(); Os

这是我在这里的第一个问题: 我有个小问题。。 这些是我的课程:

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的错误相同

私人成员访问权限仅对类成员和朋友可用。您希望它声明char znak_gracza为受保护的,这样继承Gracz的类也可以访问该成员

您的类Gracz应该更像这样:

class Gracz{
protected:
    char znak_gracza;
public:
    Gracz();
    Gracz(char znak){
            this->znak_gracza = znak;
        };
    friend void multiplayer();
};
私人成员访问权限仅对类成员和朋友可用。您希望它声明char znak_gracza为受保护的,这样继承Gracz的类也可以访问该成员

您的类Gracz应该更像这样:

class Gracz{
protected:
    char znak_gracza;
public:
    Gracz();
    Gracz(char znak){
            this->znak_gracza = znak;
        };
    friend void multiplayer();
};
多人游戏函数是Gracz类的朋友,但Osoba类不是

记住,子类不能自动访问父类私有变量。如果你想让Osoba访问znak_-gracza变量,你必须保护它。

多人游戏函数是Gracz类的朋友,但Osoba类不是


记住,子类不能自动访问父类私有变量。如果希望Osoba访问znak_gracza变量,则必须对其进行保护。

派生类无法访问父类的私有成员。您可以将它们声明为protected,这与private类似,但允许派生类访问它,但在您的情况下,由于Gracz提供了一种初始化变量的方法,您应该让Osoba将参数传递给Gracz构造函数

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

派生类无法访问父类的私有成员。您可以将它们声明为protected,这与private类似,但允许派生类访问它,但在您的情况下,由于Gracz提供了一种初始化变量的方法,您应该让Osoba将参数传递给Gracz构造函数

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

构造函数需要将参数传递给基类构造函数:

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

})

构造函数需要将参数传递给基类构造函数:

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

})

嗯,您不能访问在Gracz类中声明的私有成员znak_gracza。它是私有的。这个谜题缺少的部分可能是类成员在没有声明时是私有的,就像char znak_graczaznak_gracza是私有成员一样,因此它在派生类中是不可访问的。嗯,你不能访问在类Gracz中声明的私有成员znak_gracza。它是私有的。这个谜题缺少的部分可能是类成员在不声明其他内容时是私有的,就像char znak_graczaznak_gracza是私有成员一样,因此它在派生类中不可访问。委托给基构造函数不是更好吗?委托给基构造函数不是更好吗?