友元函数无法通过编译

#include
using namespace std;
#include
class Point//Point类声明
{
public://外部接口
Point(int xx=0, int yy=0) {x=xx;y=yy;}
int getX() {return x;}
int getY() {return y;}
friend double distance(Point &a, Point &b);
private://私有数据成员
int x,y;
};
double distance( Point& a, Point& b)
{
double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
int main()
{
Point p1(3.0, 5.0), p2(4.0, 6.0);
double d=distance(p1, p2);
cout<<"The distance is "<<d<<endl;
return 0;
}
这个在devC++中无法通过编译,问题出在那个distance友元函数那里;
如果我不用友元函数,就直接用一个成员函数就可以通过编译,球球哪位大佬看一下呗!

c++

2个回答

在class Point后面添加一行
double distance( Point& a, Point& b);

在类内的友元函数的声明只是权限的声明,并不是真正的声明。

class Point 上面需要添加一行代码
double distance( Point& a, Point& b);

表示前置声明。

aalbertini
aalbertini 回复Miracle_ps: 那前置声明就应该是 class point; double distance( Point& a, Point& b);
一年多之前 回复
Miracle_ps
一荤配一素 这个也不行呀,并且在class Point前面加的话,那个Point都还没有定义
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问