好友功能看不到私人成员

Friend Function can't see private member

我已经尝试解决这个问题一个小时了,但一无所获。

我有一个带有 friend 函数和 private 成员的 class,但我收到一个编译器错误,告诉我无法使用它访问 private 成员friend 函数。

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

friend 原型如下 class body

friend void output(family *famPtr);

私有成员是这样的:

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

这是 family 对象 Simpson.

的主函数中的函数调用本身
output(Simpson.famPtr);

我不确定我在哪里搞砸了,它看起来相对简单,我的教科书让我无处可去,none 我在这里找到的东西让我找到了正确的方向方向.

您不能通过以下方式调用函数

output(Simpson.famPtr);

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

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

也就是说,函数本身就是友元。不是函数调用的作用域是class朋友

如果 class 包含 public 访问器,例如

family * get_family() const;

然后你可以像这样调用函数

output(Simpson.get_family() );

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

创建一个将 family* 作为输入 class Simpsonfriend 的函数根本没有意义。

函数不处理Simpson,它处理family。使该功能成为 friend of Simpson 有何帮助?

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

使函数成为 friend 允许它访问 private 成员。它不允许访问所有函数调用

output(Simpson.famPtr);

此处对 famPtr 的访问不是由 output

进行的

如果将输出更改为

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

那么对 private 成员 famPtr 的访问包含在 friend 函数中