无法发现使用另一个 class C++ 的 "friend" 函数的错误

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

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

Compiler:
main.cpp: In member function 'void C::blah(B&)':
main.cpp:48:26: error: 'int B::a' is private within this context
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;  //*
    }

};

*Member B::a is inaccessible

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

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

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;
}

LIVE