尽管公式编码正确,但点 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;
}