简体   繁体   中英

Function type error c++

I am creating a class to print a point, compare two points to see if they are equal, and to find the distance between two points using separate methods for each. The method for finding the distance between two points is giving me a type error and I don't know why.

    #include <iostream>
using namespace std;

class Point 
{//in C++ stuff is private by default

public:
    Point() { double x = 0; double y = 0; }
Point (double a, double b) { x = a; y = b; }

void print() { cout << "(" << x << "," << y << ")\n" << endl; }

double getX() { return x; };
double getY() { return y; };

bool compare(Point other) { return (x == other.x && y == other.y); }

void setX(double a) 
{if (a >= 0)
    {x = a;}};

void setY(double b)
{if (b >= 0)
    {y = b;}};

double distance(Point point1, Point point2)
{
return(sqrt (pow (point1.getX-point2.getX,2) + pow(point1.getY-point2.getY,2)));
};

private:
    double x, y;
};


bool Compare(Point a, Point b) { return (a.getX() == b.getX()) && (b.getY() == a.getY()); }


int main()
{
    Point p1(5,1);
    Point p2;

    p2.setX(2);
    p2.setY(5);

    p1.print();
    p2.print(); 

    p1.getX();
    p1.getY();

    p2.getX();
    p2.getY();

    p1.setX(3.5);
    p1.setY(9);

    p1.print();


        p1.compare(p2);
    //or p2.equals(p1);
        distance(p1, p2); 

        cout << "This distance b/w p1 & p2 is:" << distance (p2, p1) << endl;

}

You have to call the methods getX and getY by adding () after each name:

return(sqrt(pow(point1.getX()-point2.getX(),2) + pow(point1.getY()-point2.getY(),2)));

Otherwise you will be subtracting pointers to functions, which isn't allowed.

#include <iostream>
#include <math.h>
using namespace std;

class Point 
{//in C++ stuff is private by default

public:
    Point() { double x = 0; double y = 0; }
Point (double a, double b) { x = a; y = b; }

void print() { cout << "(" << x << "," << y << ")\n" << endl; }

double getX() { return x; };
double getY() { return y; };

bool compare(Point other) { return (x == other.x && y == other.y); }

void setX(double a) 
{if (a >= 0)
    {x = a;}};

void setY(double b)
{if (b >= 0)
    {y = b;}};

static double distance1(Point point1, Point point2)
{
return(sqrt (pow (point1.getX()-point2.getX(),2) + pow(point1.getY()-point2.getY(),2)));
};

private:
    double x, y;
};


bool Compare(Point a, Point b) { return (a.getX() == b.getX()) && (b.getY() == a.getY()); }


int main()
{
    Point p1(5,1);
    Point p2;

    p2.setX(2);
    p2.setY(5);

    p1.print();
    p2.print(); 

    p1.getX();
    p1.getY();

    p2.getX();
    p2.getY();

    p1.setX(3.5);
    p1.setY(9);

    p1.print();


        p1.compare(p2);
    //or p2.equals(p1);
        //distance(p1, p2); 

        cout << "This distance b/w p1 & p2 is:" << Point::distance1 (p2, p1) << endl;

}

Replace distance function from class. In your case std::distance is called. And try do not use using namespace std; in your code at all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM