我已经想了一个小时了,但还是一无所获。
我有一个具有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
。使该功能成为Simpson
的friend
将如何帮助?
我很难提出一个解决方案,因为我不清楚你为什么首先想要friend
船。
将函数设置为friend
允许它访问private
成员。它不允许在对
output(Simpson.famPtr);
这里对famPtr
的访问不是由output
进行的
如果您将输出更改为
output(family & outer)
{
old_output(outer.famPtr);
}
则对private
成员famPtr
的访问包含在friend
函数