成员函数作友元的相关问题

第一次遇到的问题

#include<iostream>
#include<string>
using namespace std;

class Building;

class goodgay
{
public:
    void visit01();

    void visit02();

private:
    Building bui;
};

class Building
{
    friend void goodgay::visit01();

public:
    Building()
    {
        m_livingroom = '客厅';
        m_bedroom = '卧室';
    }

    string m_livingroom;

private:
    string m_bedroom;
};

void goodgay::visit01()
{
    {
        cout << "好基友visit01访问的是:" << bui.m_livingroom << endl;
        cout << "好基友visit01访问的是:" << bui.m_bedroom << endl;
    }
}

void goodgay::visit02()
{
        cout << "好基友visit02访问的是:" << bui.m_livingroom << endl;
}

void test01()
{
    goodgay gg;
    gg.visit01();
    gg.visit02();
}

int main()
{
    test01();
    return 0;
}

img


第二次遇到的问题

#include<iostream>
#include<string>
using namespace std;

class Building;

class goodgay
{
public:
    void visit01();

    void visit02();

private:
    Building *bui;
};

class Building
{
    friend void goodgay::visit01();

public:
    Building()
    {
        m_livingroom = '客厅';
        m_bedroom = '卧室';
    }

    string m_livingroom;

private:
    string m_bedroom;
};

void goodgay::visit01()
{
    {
        cout << "好基友visit01访问的是:" << bui->m_livingroom << endl;
        cout << "好基友visit01访问的是:" << bui->m_bedroom << endl;
    }
}

void goodgay::visit02()
{
        cout << "好基友visit02访问的是:" << bui->m_livingroom << endl;
}

void test01()
{
    goodgay gg;
    gg.visit01();
    gg.visit02();
}

int main()
{
    test01();
    return 0;
}

img

为什么第一次用指针就可以运行了,但又会出错