在使用另一个类"friend"函数时无法发现错误C++

Can't spot the mistake in using "friend" function of another class C++

本文关键字:发现 C++ 错误 friend 另一个 函数      更新时间:2023-10-16

是的,我知道private修饰符是为了禁止访问类数据
而创建的,但friend不是为了允许对它的特殊访问吗?

编译器:
main.cpp:在成员函数 'void C::blah(B&(' 中: main.cpp:48:26: error: 'int B::a' 在此上下文
中是私有的 std::cout <<obj.a <<std::
endl;

下面的所有内容都按照许多教程中的方式实现。
也许这只是我犯的一个愚蠢的错误,并且对发现视而不见。

class C;
class B {
private:
int a = 2;
public:
friend void blah(B& obj);
};
class C {
public:
void blah(B& obj) {
std::cout << obj.a << std::endl;  //*
}
};

*会员B::a无法访问

您正在声明一个名为blah的非成员函数,但不是C::blahfriend

您可以将代码更改为以下内容,并记下声明和定义的顺序。

class B;
class C {
public:
void blah(B& obj);
};
class B {
private:
int a = 2;
public:
friend void C::blah(B& obj);
};
void C::blah(B& obj) {
std::cout << obj.a << std::endl;
}