制作成员函数,一个class的朋友

Making member function, friend of a class

我一直在尝试编写代码来实现一个成员函数,该函数可以通过将 class 声明为 class 中的好友来访问其私有数据。但是我的代码失败了,我似乎无法弄清楚它有什么问题:

#include <iostream>

using namespace std;

class A;
class B
{
    private:
    int b;       // This is to be accessed by member function of A

    public:
    friend void A::accessB();
};

class A
{
    private:
    int a;

    public:
    void accessB();
};

void A::accessB()
 {
     B y;
     y.b = 100;
     cout << "Done" << endl;
 }

int main(void)
{
    A x;
    x.accessB();
}

我正在尝试使用 getAccessB 函数访问 B 的私有内容,该函数是 A 的成员函数。我已将其声明为好友。这有什么问题吗?

A::accessBfriend声明的地方没有声明,所以不能引用。您可以通过改变定义和声明的顺序来解决此问题,使 A::accessBB:

可见
class A
{
    private:
    int a;

    public:
    void accessB();
};

class B
{
    private:
    int b;

    public:
    friend void A::accessB();
};


void A::accessB()
 {
     B y;
     y.b = 100;
     cout << "Done" << endl;
 }

请注意,将函数设为 friend 只是为了修改您的私有状态是一种不好的代码味道。希望您这样做只是为了理解这些概念。

排序。如果您指的是 A::accessB,则必须在该点声明 A。将 A class 放在 B 上方,它将正常工作。