繁体   English   中英

无法访问在类中声明的私人成员,甚至无法访问声明为朋友的类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM