0

我有两节课:

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”中声明的私有成员

为什么会这样?我的朋友类声明有问题吗?

4

1 回答 1

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() 的私有函数

于 2018-02-12T06:41:56.850 回答