成员在C ++中充当Friend函数

时间:2014-02-25 08:02:26

标签: c++ member friend

运行以下代码以使用友元函数时出错。我的类XYZ1有一个友元函数,它是ABC1类的成员函数(findMax)。我的类声明如下

class XYZ1;

class ABC1
{
    int a;
    public :
    ABC1()
    {
        a =20;
    }
    void findMax(XYZ1 p)
    {
        if (p.x > a) cout<< "Max is "<<p.x;
        else cout <<"Max is "<<a;
    }
};

class XYZ1
{
    int x;
    public :
    XYZ1()
    {
        x =10;
    }
    friend void ABC1::findMax(XYZ1);
};

 main()
{
    XYZ1 p;
    ABC1 q;
    q.findMax(p);
}

错误:friend3.cpp:14:7:错误:'p'类型不完整 friend3.cpp:4:7:错误:'struct XYZ1'的前向声明

请帮忙

2 个答案:

答案 0 :(得分:2)

在定义类XYZ1后定义findMax方法。

#include <iostream>
using namespace std;

class XYZ1;

class ABC1
{
    int a;
    public :
    ABC1()
    {
        a =20;
    }
    void findMax(XYZ1 p);
};

class XYZ1
{
    int x;
    public :
    XYZ1()
    {
        x =10;
    }
    friend void ABC1::findMax(XYZ1);
};

void ABC1::findMax(XYZ1 p)
    {
        if (p.x > a) cout<< "Max is "<<p.x;
        else cout <<"Max is "<<a;
    }

int main()
{
    XYZ1 p;
    ABC1 q;
    q.findMax(p);
    return 0;
}

答案 1 :(得分:0)

您必须拥有class XYZ1的完整声明,以便编译器能够编译使用它的代码。

所以将void findMax(XYZ1 p)的实施移到class XYZ1

的声明之下
class ABC1
{
    ...
    void findMax(XYZ1 p);
};

class XYZ1
{
    ...
    friend void ABC1::findMax(XYZ1 p);
};

void ABC1::findMax(XYZ1 p)
{
    ...
}