一个类(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; )

原因是什么

用成员函数作友元也可以,注意声明的顺序,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;
}

你应该声明为友元类

#include <iostream>
#include <string>

using namespace std;

class build
{
    friend class godMan; // 声明友元类

public:
    build()
    {
        room = "客厅";
        bedroom = "卧室";
    }

public:
    string room;

private:
    string bedroom;
};

class godMan
{

public:
    godMan()
    {
        p = new build;
    }

    build *p;

    void visit()
    {
        cout << "访问:" << p->room << endl;
        cout << "访问:" << p->bedroom << endl;
    }
};

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

你应该声明为友元类

#include <iostream>
#include <string>

using namespace std;

class build
{
    friend class godMan; // 声明友元类

public:
    build()
    {
        room = "客厅";
        bedroom = "卧室";
    }

public:
    string room;

private:
    string bedroom;
};

class godMan
{

public:
    godMan()
    {
        p = new build;
    }

    build *p;

    void visit()
    {
        cout << "访问:" << p->room << endl;
        cout << "访问:" << p->bedroom << endl;
    }
};

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