即使将会员功能设为好友也无法访问会员

can't access member even after making a member function a friend

本文关键字:访问 好友 功能      更新时间:2023-10-16

在下面的代码中,如果我使College类成为University类的朋友,那么我就可以访问University类的私有属性。但是在College类中,我只希望print函数访问那些私有属性。所以,我只是作为朋友制作了College类的print函数,但这似乎不起作用。我错过了什么或做错了什么?

错误:无法访问University类的名称专用属性。

#include <iostream>
//class college; 
class University{
    //friend class college;   // Works fine
    friend void College::print(University &ob);    // doesn't work
public:
    University() = default;
    University(int i, char *n) : buildings{ i }, name{ n } {}
private:
    int buildings; 
    char *name; 
};
class College{
public:
    void print(University &ob){
        std::cout << "I am a part of " << ob.name;   // <-----------
    }
};
int main()
{
    University first{ 2000, "Mit" };
    College c; 
    c.print(first); 
    return 0; 
}

为了使用

friend void College::print(University &ob);

College的定义必须可见。

class University;
class College{
public:
    void print(University &ob);
};
class University{
    //friend class college;   // Works fine
    friend void College::print(University &ob);
public:
    University() = default;
    University(int i, char *n) : buildings{ i }, name{ n } {}
private:
    int buildings; 
    char *name; 
};
void Collelge::print(University &ob){
        std::cout << "I am a part of " << ob.name;   // <-----------
}