运行以下代码以使用友元函数时出错。我的类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'的前向声明
请帮忙
答案 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)
{
...
}