C++成员函数做友元中遇到的问题

为什么我的visit成员函数无法访问Building类里的私有成员,在编译器里还是会标红

img

#include<iostream>
using namespace std;

class Building {
    friend void GoodGay::visit();//告诉编译器 GoodGay类下的visit成员函数可以访问私有内容

public:
    string m_SittingRoom;

    Building() {
        m_SittingRoom = "客厅";
        m_BedRoom = "卧室";
    }

private:
    string m_BedRoom;
};

class GoodGay {
public:
    GoodGay() {
        building = new Building;
    }

    void visit() {// 让visit函数可以访问Building中的私有成员
        cout << "visit函数正在访问:" << building->m_SittingRoom << endl;
        cout << "visit函数正在访问:" << building->m_BedRoom << endl;
    }

    void visit2() {// 让visit2函数不可以访问Building中的私有成员
        cout << "visit2函数正在访问:" << building->m_SittingRoom << endl;
    }

    Building* building;
};

void test01() {
    GoodGay gg;
    gg.visit();
    gg.visit2();
}

int main() {
    test01();

    system("pause");
}

在类内最上面加上 friend void visit();

这也不是友元函数啊,这是building类对象的指针是googgay类的成员变量


#include<iostream>
using namespace std;
class Building;
class GoodGay {
public:
    GoodGay();

    void visit();

    void visit2(); 
    Building* building;
};

class Building {
    friend void GoodGay::visit();//告诉编译器 GoodGay类下的visit成员函数可以访问私有内容
public:
    string m_SittingRoom;
    Building() {
        m_SittingRoom = "客厅";
        m_BedRoom = "卧室";
    }

private:
    string m_BedRoom;
};




void test01() {
    GoodGay gg;
    gg.visit();
    gg.visit2();
}
GoodGay::GoodGay() {
    this->building = new Building;
}
void GoodGay::visit() {// 让visit函数可以访问Building中的私有成员
    cout << "visit函数正在访问:" << this->building->m_SittingRoom << endl;
    cout << "visit函数正在访问:" << this->building->m_BedRoom << endl;
}
void GoodGay::visit2(){// 让visit2函数不可以访问Building中的私有成员
       cout << "visit2函数正在访问:" << building->m_SittingRoom << endl;
   }
int main() {
    test01();

    system("pause");
}

给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C++中类成员函数做友元函数为什么报错?
同时,你还可以查看手册:c++-成员函数 中的内容