尽管公式编码正确,但 Point 类中的距离函数未返回正确的值

Posted

技术标签:

【中文标题】尽管公式编码正确,但 Point 类中的距离函数未返回正确的值【英文标题】:Distance function in Point class is not returning the correct value despite the formula being coded properly 【发布时间】:2020-07-04 17:13:10 【问题描述】:
#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++ 新手,所以我猜我只是编码错误。 忽略其余部分,它一直告诉我我需要添加更多详细信息才能发布此问题。烦人。

【问题讨论】:

这就是你don't use using namespace std的原因。您在两个指针上调用std::distance,而不是您自己的函数,该函数是该类的成员并采用引用而不是指针。 double d=sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))); - 请不要这样写。将其分解为更小的组件。 @Jesper 看起来很时尚。那行对我来说是完全可读的。可以根据我的口味使用更多的水平空白,但勾股定理很容易识别。 @JohnFilleau -- 也许它看起来可读,因为距离公式是众所周知的。如果它是一个更晦涩的公式,它可能看起来不那么可读。 【参考方案1】:

您可以将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;

【讨论】:

【参考方案2】:

由于您将distance() 声明为Point 的成员函数,因此您必须将其作为Point 的成员函数调用。

你的代码

cout &lt;&lt; distance(pointA, pointB);

不会起作用,因为它忽略了distance 必须作为成员函数调用的事实。要解决此问题,请将输出语句更改为

cout &lt;&lt; pointA.distance(pointA, pointB) &lt;&lt; endl;

注意:正如 @cigien 在 cmets 中所述,实现 distance 函数的更好方法是使其成为非成员函数

double distance(Point a, Point b)
    return something;

或者让它成为只有一个参数的成员函数:

struct Point
    double x, y;

    double distance_to(Point b)
        return something;
    

【讨论】:

必须是友元函数或静态成员函数才能访问私有元素。 明确地说,我正在编写此代码作为大学作业,我们还没有谈到朋友函数的主题,所以我将不得不使用静态成员函数,但我没有老实说,我不知道该怎么做。你能给我一些示例代码吗?

以上是关于尽管公式编码正确,但 Point 类中的距离函数未返回正确的值的主要内容,如果未能解决你的问题,请参考以下文章

此函数为CameraPosition中的zoom参数返回null而不是正确的值,我无法弄明白

对“vtable”的未定义引用

OCUnit 测试在未测试的类中给出错误

尽管设置了属性,但画布绘图未正确绘制

具有正确地址但具有另一个随机值的 C++ 指针?

如何使用python函数从文本文件导入坐标来计算距离