朋友功能无法看到私人会员

时间:2015-08-24 17:41:40

标签: c++ function friend

我已经试着弄清楚这一小时了,我已经无处可去了。

我有一个包含friend函数和private成员的类,但是我收到编译器错误,告诉我无法使用private函数访问friend成员

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);

我不知道我在哪里乱搞,看起来相对简单,我的教科书让我无处可去,我在这里找到的任何东西都没有让我朝着正确的方向前进。

3 个答案:

答案 0 :(得分:3)

您可能无法通过以下方式调用该功能

output(Simpson.famPtr);

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

在您可以使用表达式Simpson.famPtr。

的函数中

这就是功能本身就是朋友。调用函数的范围不是类朋友。

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

family * get_family() const;

然后你可以调用像

这样的函数
output(Simpson.get_family() );

答案 1 :(得分:2)

您的计划似乎存在设计缺陷。

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

该函数不处理Simpson,它处理family。如何使friend Simpson帮助实现该功能?

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

答案 2 :(得分:0)

将功能friend设为允许其访问private成员。它不允许访问函数的所有调用

output(Simpson.famPtr);

此处famPtr无法访问output

如果您将输出更改为

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

然后,对private成员famPtr的访问权限包含在friend函数