好友功能 - 成员不可访问

Friend function - member is inaccessible

我正在学习 C++ 课程,我遇到了一些我无法理解的事情。我尝试寻找答案,但找不到答案。

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

我知道要使它起作用,class A 应该在 class C 之前声明,但在之后定义。但我很难理解为什么。

那么为什么class成员A::field在classA定义在classC之前无法访问?

问题不在于好友声明,只是 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--; }