haoxiaolan 2022-01-27 15:38 采纳率: 34.7%
浏览 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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效