新手请教!!!!!!

梅赛德斯466 2024-02-25 12:46:08

 

明明已经添加了友元声明,为什么还是不能访问bedroom

...全文
209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1

1,你别用inline的方式写成员函数,都拿出来写,包括构造函数。
2,你把两个类换个顺序。你的building还没有真正见到成员函数,它指定不了友元所在的位置。尽管具有全局范围的函数可以在其原型之前声明为 friend 函数,但是成员函数在它们的完整类声明出现前不能声明为 friend 函数。

  • 打赏
  • 举报
回复

您应该在building中声明友元类而不是友元函数。friend void goodgay::visit()改成 friend class goodgay

img

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

class building {
    friend class goodgay;
private:
    string bedroom;
public:
    string livingroom;
    building() {
        livingroom = "客厅";
        bedroom = "卧室";
    }


};
class goodgay {

public:
    building* in;
    goodgay() {
        in = new building;
    }
    void visit() {
        cout << "visit函数正在访问"<<in->livingroom << endl;
        cout << "visit函数正在访问"<<in->bedroom << endl;
    }
    
};
int main() {
    goodgay gg;
    gg.visit();
    return 0;
}



  • 举报
回复
@太空漫步11 但是这节课学的是成员函数做友元
  • 举报
回复
@梅赛德斯466 我今天下午也在试这个,如果是成员函数,得先完整定义出class goodgay,然后再写class building,并且还要先声明building,不然即使不报错也运行不了,goodgay里其实还是不认识building*
  • 举报
回复
@梅赛德斯466 友元函数应该在类外面实现,类对象应该作为友元函数的参数。(参考的wangyin668网友写的csdn博客《友元函数》) #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class goodgay; class building { friend void visit(building); private: string bedroom; public: string livingroom; building() { livingroom = "客厅"; bedroom = "卧室"; } }; class goodgay { public: goodgay() { } }; void visit(building bd) { cout &lt;&lt; bd.livingroom; cout &lt;&lt; bd.bedroom; } int main() { building bd; goodgay gg; visit(bd); return 0; }

64,311

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧