这是我在这里的第一个问题:) 我有点问题.. 这些是我的课程:
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'
答案 0 :(得分:6)
派生类无法访问父类的私有成员。您可以将它们声明为protected
(它类似于私有但允许派生类访问它),但在您的情况下,由于Gracz
提供了初始化变量的方法,您应该让Osoba
将参数传递给Gracz
构造函数。
Osoba(char znak)
: Gracz(znak) // initializes parent class
{}
答案 1 :(得分:5)
private
会员访问仅适用于班级成员和朋友。您正在寻找将char znak_gracza
声明为protected
的内容,因此继承Gracz
的类也可以访问该成员。
class Gracz{
protected:
char znak_gracza;
public:
Gracz();
Gracz(char znak){
this->znak_gracza = znak;
};
friend void multiplayer();
};
答案 2 :(得分:2)
构造函数需要将参数传递给基类构造函数:
class Osoba: public Gracz{
public:
//...
Osoba(char znak) :
Gracz(znak) {
}
};
答案 3 :(得分:0)
multiplayer
函数是Gracz
类的朋友,但Osoba
类不是。
请记住,子类无法自动访问父类私有变量。如果您希望Osoba
访问znak_gracza
变量,则必须将其设为protected
。