不能访问类中声明的私有成员
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
。
相关文章:
- 使用静态成员声明类时遇到问题
- 错误 C2059:语法错误:从结构成员声明'constant'
- std::d eclare_if 或其他在编译时丢弃成员声明的假设方法
- C++ 成员声明中不允许使用限定名称
- 又一个"未找到成员声明"
- auto f = bind(dist<>,gen) 在成员声明C++失败。未被识别为函数
- C++错误:成员声明末尾的预期“;”
- 静态成员声明 c++11
- 如何将成员声明为指向外部"C"函数的指针?
- C++11 - 将非静态数据成员声明为 'auto'
- 类成员声明的快捷方式
- libclang 获取成员声明
- 将成员声明与enable_if一起使用
- 找不到成员声明
- C++错误:找不到成员声明
- 找不到c++成员声明
- 成员声明顺序在类中如果彼此依赖,则为最优解
- 将struct的成员声明为uint32_t时额外的字节
- 为什么类的大小取决于成员声明的顺序?以及如何
- 是成员声明`decltype(name)name;`在第一个名称引用封闭作用域的本地结构中允许