- 论坛徽章:
- 0
|
5可用积分
#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
Point(float x,float y){X=x;Y=y;}
float getX(){return X;}
float getY(){return Y;}
friend float distance(Point& a,Point& b);
private:
float X,Y;
};
float distance(Point& a,Point& b)
{
float xx=a.X-b.X;
float yy=a.Y-b.Y;
return sqrt(xx*xx+yy*yy);
}
int main()
{
float m1,m2,n1,n2;
cout<<"请输入其中一点的坐标:"<<"(";
cin>>m1>>m2;
cout<<")"<<endl;
cout<<"请输入另一点的坐标:"<<"(";
cin>>n1>>n2;
cout<<")"<<endl;
Point myp1(m1,m2), myp2(n1,n2);
cout<<"the distance is:";
cout<<distance(myp1,myp2)<<endl;
system("pause");
} |
最佳答案
查看完整内容
出错原因:你自己定义的::distance函数与标准库定义的std::distance模板函数冲突了。在调用distance(myp1,myp2)时,这两个distance函数都可见,编译器会去推断std::ditance的模板参数(为Point),并试图实例化该函数模板,却发现模板参数Point内并没有想要的迭代器所必须具有的5个内嵌public类型(iterator_category等),从而实例化失败,编译器报错纠正方法:(1)对自己定义的distance改名,避免与标准库版本冲突(2)对自己定 ...
|