haoxiaolan 2022-01-27 15:38 采纳率: 35.1%
浏览 38
已结题

一个类(a类)的成员函数 作另一个类(b类)的 友元函数

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



class build{
    
    friend void godMan::visti();      //出错位置
    
    public:
    
        build(){
            room = "客厅";
            bedroom = "卧室"; 
        }
    
    public:
        string room;
    
    private:
        string bedroom;
    
}; 

class godMan{
    
    public:
        godMan()
        {
            p = new build;
        }
        build *p;
        
        void visti()
        {
            cout <<"访问:"<<p->room<<endl;
            //cout <<"访问:"<<p->bedroom<<endl;    
        }
};



int main()
{
    godMan gg;
    gg.visti();
    
    return 0;
 } 

[Error] 'godMan' has not been declared

1.在类中实现函数。
class build 在 class godMan 前面定义 报错
class build 在 class godMan 后面定义 报错 (class godMan{ } 前面有class build; )

2.
在类中实现函数。
或在类中声明函数,在类外实现函数。
class build 在 class godMan 前面定义 就报错

3.
在类中声明函数,在类外实现函数。
class build 在 class godMan 后面定义 就可以运行 (class godMan{ } 前面有class build; )

原因是什么
  • 写回答

3条回答 默认 最新

  • 真相重于对错 2022-01-27 16:04
    关注

    用成员函数作友元也可以,注意声明的顺序,c++是强类型的语言,在用任何类型之前都要明确要用的类型具体布局

    
    #include<iostream>
    #include<string>
    using namespace std;
    class build;
    class godMan {
        public:
        godMan()
        {
          
        }
        
        void visti(build* p);
       
    };
    
    class build {
    
        friend void godMan::visti(build *p);      //出错位置
    
    public:
    
        build() {
            room = "客厅";
            bedroom = "卧室";
        }
    
    public:
        string room;
    
    private:
        string bedroom;
    
    };
    
    
    
    void godMan::visti(build * p)
    {
        cout << "访问:" << p->room << endl;
        //cout <<"访问:"<<p->bedroom<<endl;    
    }
    int main()
    {
        build* p=new build;
        godMan gg;
        gg.visti(p);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 创建了问题 1月27日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能