是的,我知道创建“私有”修饰符是为了禁止访问班级数据但是“朋友”不是要允许他们获得特殊权限吗?
编译器:main.cpp:在成员函数'void C :: blah(B&)'中:main.cpp:48:26:错误:'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::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; //*
}