c++ - 好友功能看不到私有(private)成员

标签 c++ function friend

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

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

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

类体内的friend原型(prototype)如下

friend void output(family *famPtr);

私有(private)成员是这样的:

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

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

output(Simpson.famPtr);

我不确定我在哪里搞砸了,它看起来相对简单,我的教科书让我无处可去,我在这里找到的任何东西都没有引导我走向正确的方向。

最佳答案

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

output(Simpson.famPtr);

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

它位于您可以使用表达式 Simpson.famPtr 的函数内。

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

如果该类包含一个公共(public)访问器,例如

family * get_family() const;

然后你就可以调用这个函数了

output(Simpson.get_family() );

关于c++ - 好友功能看不到私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32188403/

相关文章:

c++ - 从函数返回的堆分配

C 如何使用函数 uname

function - PostgreSQL 函数,需要获取函数内部的变量

C++ friend ,重写嵌套类的函数

c++ - 将整数转换为字节数组时获取奇数字符

c++ - 根据模式的出现重新组合字符串

c++ - OpenCV:断言失败 "dst.data == widget->original_image->data.ptr in function ' cvImageWidgetSetImage' "

PHP 生成 IP 范围

c++ - 专门为私有(private)类(class)的功能?

c++ - ADL 是调用 friend 内联函数的唯一方法吗?