我已经试着弄清楚这一小时了,我已经无处可去了。
我有一个包含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);
我不知道我在哪里乱搞,看起来相对简单,我的教科书让我无处可去,我在这里找到的任何东西都没有让我朝着正确的方向前进。
答案 0 :(得分:3)
您可能无法通过以下方式调用该功能
output(Simpson.famPtr);
因为相对于调用函数的范围,数据成员Simpson.famPtr
是私有的。
在您可以使用表达式Simpson.famPtr。
的函数中这就是功能本身就是朋友。调用函数的范围不是类朋友。
如果该类包含公共访问器,例如
family * get_family() const;
然后你可以调用像
这样的函数output(Simpson.get_family() );
答案 1 :(得分:2)
您的计划似乎存在设计缺陷。
创建一个以family*
作为输入friend
类Simpson
的函数根本没有意义。
该函数不处理Simpson
,它处理family
。如何使friend
Simpson
帮助实现该功能?
我很难提出解决方案,因为我不清楚为什么你想要friend
- 首先出货。
答案 2 :(得分:0)
将功能friend
设为允许其访问private
成员。它不允许访问函数的所有调用
output(Simpson.famPtr);
此处famPtr
无法访问output
如果您将输出更改为
output(family & outer)
{
old_output(outer.famPtr);
}
然后,对private
成员famPtr
的访问权限包含在friend
函数