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

时间:2018-02-12 03:34:45

标签: c++ class private-members 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'中声明的私有成员

为什么会这样?我的朋友班宣言有问题吗?

1 个答案:

答案 0 :(得分:0)

允许朋友类和函数访问类的私有数据成员。因此,在作为另一个类的朋友的类中,您可以访问私有成员。访问朋友类或朋友函数内的私有成员,我们必须为该类创建对象,然后我们才能访问私有成员。    在你的例子中,你将CALLDB作为CALL和CALL到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()的私有函数