c++ - 好友功能-成员(member)无法访问

标签 c++ friend-function

我正在学习 C++ 类(class),我遇到了一些我无法理解的事情。我尝试寻找答案,但没有找到答案。

class A {
    friend void C::dec(A&);
private:
    int field;
};

class C {
public:
    void dec(A& a);
};

void C::dec(A& a) { a.field--; } <-- member A::field is inaccessible

我知道要实现这一点,类 A 应该在类 C 之前声明,但在类 C 之后定义。但我很难理解为什么。

那么为什么当类 A 在类 C 之前定义时,类成员 A::field 不可访问呢?

最佳答案

问题不在于友元声明,只是 C 未知您在 A 中声明它的位置。

因此,您定义 C 并转发声明 A,然后像您已经做的那样定义 C

class A;

class C {
public:
    void dec(A& a);
};

class A {
    friend void C::dec(A&);
private:
    int field;
};


void C::dec(A& a) { a.field--; }

关于c++ - 好友功能-成员(member)无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59681960/

相关文章:

C++(逻辑复制构造函数)如何复制一个对象?

c++ - 如何使用强类型枚举

c++ - 我的 friend 功能没有执行

c++ - 如何在模板类中拆分模板友元函数的定义?

c++错误C2662无法将 'this'指针从 'const Type'转换为 'Type &'

c++ - c++中的 friend 保护方法

C++ 共享库 : Creation and usage

c++ - C++程序的Lnk2020错误

c++ - 如何使用静态函数填充静态 std::map?

c++ - 有没有办法为两个类声明共同的 friend 函数