C++ Can';不要在使用中发现错误;“朋友”;另一类C的函数++;

C++ Can';不要在使用中发现错误;“朋友”;另一类C的函数++;,c++,friend,C++,Friend,是的,我知道,private修饰符是为了禁止访问类数据而创建的 但是,friend不打算允许特殊访问它吗 编译器: main.cpp:在成员函数“void C::blah(B&)”中: main.cpp:48:26:错误:“int B::a”在此上下文中是私有的 std::cout您正在声明一个名为blah的非成员函数,但不是C::blah为friend 您可以将代码更改为以下内容,并注意声明和定义的顺序 class B; class C { public: void blah(B&a

是的,我知道,
private
修饰符是为了禁止访问类数据而创建的
但是,
friend
不打算允许特殊访问它吗

编译器:
main.cpp:在成员函数“void C::blah(B&)”中:
main.cpp:48:26:错误:“int B::a”在此上下文中是私有的

std::cout您正在声明一个名为
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;
}
B类;
C类{
公众:
无效的废话(B&obj);
};
B类{
私人:
INTA=2;
公众:
朋友空C::布拉(B&obj);
};
空C::诸如此类(B&obj){
标准::cout
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;
}