![](/img/trans.png)
[英]Why am I getting the error 'cannot access private member declared in class' even though I have declared friend class
[英]Cannot access private member declared in class, even declared friend class
我有两节课:
class CALLDB;
class CALL
{
friend class CALLDB;
public:
string GetStart()const;
private:
string start;
};
第二类:
class CALLDB
{
friend class CALL;
public:
unsigned int Load(istream& fin);
private:
unsigned int numCalls;
};
在主要功能中,我这样做:
int main(){
CALLDB calldata;
cout<<calldata.numCalls;
}
然后它说:
错误C2248:“ CALLDB :: numCalls”:无法访问在类“ CALLDB”中声明的私有成员
为什么会发生? 我的朋友班宣言有问题吗?
允许朋友类和函数访问类的私有数据成员。 因此,在作为另一个类的朋友的类中,您可以访问私有成员。要在friend类或friend函数中访问私有成员,我们必须为该类创建对象,然后只有我们才能访问私有成员。 在您的示例中,您将CALLDB设为CALL的朋友,并将CALLDB设为CALLDB的朋友,因此这两个类都可以访问其他类的私有成员(即,您可以在CALL中访问CALLDB的私有成员,而在CALLDB中访问CALL的私有成员。从不是朋友的主要功能访问私有成员的课程。希望您能理解该概念。在这里,我给出了一个简单的示例来了解朋友类的概念。您可以按照自己的方式尝试并执行程序需求
#include <iostream>
Using namespace std;
class CALLDB;
class CALL
{
friend class CALLDB;
private:
void display()
{
cout<<"\n from Private function of display() of the class CALL ";
}
};
class CALLDB
{
friend class CALL;
public:
void output()
{
CALL ca;
cout<<"\n from public function output of CALLDB class ";
cout<<"\n Calling of private function display of class CALL";
ca.display();
}
};
int main()
{
CALLDB cd1;
cd1.output();
}
输出值
从CALLDB类的公共函数输出中
调用CALL类的私有功能显示
来自类CALL的display()的私有函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.