自学C++半个月遇到的问题求解答

自学C++半个月的准大学生,跟着黑马程序员的课程学,在类函数作友元这一集时遇到了一个问题,下面代码主要思路是跟着视频敲的

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


class Building
{
    friend void GoodGay::visit();    //此处明明已经声明了visit函数作友元
public:

    string m_sittingroom;
    Building()
    {
        m_sittingroom = "客厅";
        m_bedroom = "卧室";

    }
private:
    string m_bedroom;

};

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

    }
    Building* building;

    void visit()
    {
        cout << building->m_sittingroom << endl;
        cout << building->m_bedroom << endl;     ** //此处m_bedroom 被编译器报错了,不知道是为什么?明明前面已经注明了visit函数作友元
**

    }

};

int main()
{

    GoodGay gg;
    gg.visit();


}

img

【以下回答由 GPT 生成】

问题解决思路:

在代码中,我们需要在GoodGay类中访问Building类的m_bedroom成员变量,但是编译器报错了。问题出在friend void GoodGay::visit();这行代码上,我们需要正确的声明GoodGay类和visit函数。下面是解决该问题的具体步骤:

  1. 修改Building类的声明,在类声明的最后加上class GoodGay;,这样可以提前声明GoodGay类。
  2. friend void GoodGay::visit();这行代码放在GoodGay类的前面,这样编译器可以正确识别GoodGay类。
  3. GoodGay类的定义放在Building类的后面,这样在GoodGay类的定义中,就可以访问到Building类的私有成员变量了。

修改后的代码如下:

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

class Building
{
    friend class GoodGay;    //在类声明的最后加上class GoodGay; 以提前声明GoodGay类
public:
    string m_sittingroom;
    Building()
    {
        m_sittingroom = "客厅";
        m_bedroom = "卧室";
    }

private:
    string m_bedroom;
};

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

    void visit()
    {
        cout << building->m_sittingroom << endl;
        cout << building->m_bedroom << endl;
    }
};

int main()
{
    GoodGay gg;
    gg.visit();
}

这样,编译器就不会再报错了,你可以成功运行程序并输出结果了。希望能帮助到你!如果你还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^