好友功能 - 成员无法访问

Friend function - member is inaccessible

本文关键字:访问 成员 功能 好友      更新时间:2023-10-16

我正在上一门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

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

那么,为什么在类 C 之前定义类 A 时无法访问类成员 A::字段呢?

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