好友功能看不到私人成员



我已经想了一个小时了,但还是一无所获。

我有一个具有friend函数和private成员的类,但我得到一个编译器错误告诉我,我不能使用friend函数访问private成员。

line 36 error: 'family* family::famPtr' is private

在类体

friend原型如下
friend void output(family *famPtr);

私有成员如下:

private:
    string husband;
    string wife;
    string son;
    string daughter1;
    string daughter2;
    family *famPtr;

这是family对象Simpson的主函数中的函数调用本身。

output(Simpson.famPtr);

我不知道我在哪里搞砸了,它似乎相对简单,我的教科书没有给我任何帮助,我在这里找到的东西都没有把我带到正确的方向。

不能按以下方式调用函数

output(Simpson.famPtr);

,因为相对于调用函数的作用域,数据成员Simpson.famPtr是私有的。

在函数中可以使用表达式Simpson.famPtr.

也就是说函数本身是友元。它不是调用函数的作用域,而是类友元。

如果类包含公共访问器,例如

family * get_family() const;

则可以像

这样调用函数
output(Simpson.get_family() );

你的程序似乎存在设计缺陷。

family*作为输入的函数作为Simpson类的friend根本没有意义。

这个函数不处理Simpson,它处理family。使该功能成为Simpsonfriend将如何帮助?

我很难提出一个解决方案,因为我不清楚你为什么首先想要friend船。

将函数设置为friend允许它访问private成员。它不允许在对

函数的所有调用中访问
output(Simpson.famPtr);

这里对famPtr的访问不是由output进行的

如果您将输出更改为

output(family & outer)
{
   old_output(outer.famPtr);
}

则对private成员famPtr的访问包含在friend函数

最新更新