成员功能,班级的朋友

时间:2015-08-27 11:13:09

标签: c++ class private friend

我一直试图编写一个代码来实现一个成员函数,该函数可以通过将其声明为类中的朋友来访问类的私有数据。但我的代码失败了,我似乎无法弄清楚它的错误:

#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的成员函数。我已将其声明为朋友。这有什么问题?

2 个答案:

答案 0 :(得分:3)

A::accessB未在friend声明中声明,因此您无法引用它。您可以通过更改定义和声明的顺序来解决此问题,以便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只是为了让它可以修改您的私有状态是一个糟糕的代码味道。希望你这样做是为了理解这些概念。

答案 1 :(得分:1)

订购。如果您指的是A::accessB,则必须在此点声明A。将A课程放在B之上,它会正常工作。