尽管公式编码正确,但点 class 中的距离函数未返回正确值
Distance function in Point class is not returning the correct value despite the formula being coded properly
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
class Point{
int x,y;
public:
Point(){
x=0;
y=0;
}
Point(int a, int b){
a=1;
b=1;
}
Point(const Point &a){
x=a.x;
y=a.y;
}
void setvalues(int a, int b){
x=a;
y=b;
}
int getvalueX(){
return x;
}
int getvalueY(){
return y;
}
double distance(const Point &a,const Point &b){
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
}
};
int main()
{
Point pointA;
Point pointB;
pointA.setvalues(9,7);
pointB.setvalues(3,2);
cout<<pointA.getvalueX()<<","<<pointA.getvalueY()<<endl<<pointB.getvalueX()<<","<<pointB.getvalueY()<<endl<<distance(&pointA,&pointB);
return 0;
}
我在另一个程序中使用了这个公式,它工作得很好。我是 c++ 的新手,所以我猜我只是编码不正确。 忽略其余部分它一直告诉我我需要向 post 添加更多详细信息这个问题。烦人.
由于您将 distance()
声明为 Point
的成员函数,因此您必须将其作为 Point
.
的成员函数来调用
您的代码
cout << distance(pointA, pointB);
不会工作因为它忽略了distance
必须作为成员函数调用的事实。要解决此问题,请将输出语句更改为
cout << pointA.distance(pointA, pointB) << endl;
注意:正如评论中的 @cigien
所述,实现 distance
函数的更好方法是使其成为非成员函数
double distance(Point a, Point b){
return something;
}
或者做成只有一个参数的成员函数:
struct Point{
double x, y;
double distance_to(Point b){
return something;
}
}
您可以使 distance
成为静态成员函数。这样您就可以访问私有元素并且不需要对象来调用方法。
static double distance(const Point &a,const Point &b){
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
}
您可以将其设为友元函数
friend double distance(const Point &a,const Point &b){
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
}
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
class Point{
int x,y;
public:
Point(){
x=0;
y=0;
}
Point(int a, int b){
a=1;
b=1;
}
Point(const Point &a){
x=a.x;
y=a.y;
}
void setvalues(int a, int b){
x=a;
y=b;
}
int getvalueX(){
return x;
}
int getvalueY(){
return y;
}
double distance(const Point &a,const Point &b){
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
}
};
int main()
{
Point pointA;
Point pointB;
pointA.setvalues(9,7);
pointB.setvalues(3,2);
cout<<pointA.getvalueX()<<","<<pointA.getvalueY()<<endl<<pointB.getvalueX()<<","<<pointB.getvalueY()<<endl<<distance(&pointA,&pointB);
return 0;
}
我在另一个程序中使用了这个公式,它工作得很好。我是 c++ 的新手,所以我猜我只是编码不正确。 忽略其余部分它一直告诉我我需要向 post 添加更多详细信息这个问题。烦人.
由于您将 distance()
声明为 Point
的成员函数,因此您必须将其作为 Point
.
您的代码
cout << distance(pointA, pointB);
不会工作因为它忽略了distance
必须作为成员函数调用的事实。要解决此问题,请将输出语句更改为
cout << pointA.distance(pointA, pointB) << endl;
注意:正如评论中的 @cigien
所述,实现 distance
函数的更好方法是使其成为非成员函数
double distance(Point a, Point b){
return something;
}
或者做成只有一个参数的成员函数:
struct Point{
double x, y;
double distance_to(Point b){
return something;
}
}
您可以使 distance
成为静态成员函数。这样您就可以访问私有元素并且不需要对象来调用方法。
static double distance(const Point &a,const Point &b){
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
}
您可以将其设为友元函数
friend double distance(const Point &a,const Point &b){
int x1=a.x,x2=b.x,y1=a.y,y2=b.y;
double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
return d;
}