我一直试图编写一个代码来实现一个成员函数,该函数可以通过将其声明为类中的朋友来访问类的私有数据。但我的代码失败了,我似乎无法弄清楚它的错误:
#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的成员函数。我已将其声明为朋友。这有什么问题?
答案 0 :(得分:3)
A::accessB
未在friend
声明中声明,因此您无法引用它。您可以通过更改定义和声明的顺序来解决此问题,以便A::accessB
对B
可见:
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
之上,它会正常工作。