Оператор == ошибка

Я определил класс Point. У меня также есть класс PointCollection: class PointCollection: public QVector<Point> Здесь при реализации некоторых методов я получаю следующую ошибку:

ошибка: нет совпадения для оператора '==' (типы операндов 'Точка' и 'Константная точка')

Вот часть кода, на которой у меня есть эта ошибка:

    Point PointCollection::getNearestPointToCentroid()
{
    float minDist = 0.0;
    int NearestPointToCentroidIndex = -1;
    while(!this->empty())
    {
        Point point;
        Point centroid;
        float dist = PointT.calculateEuclideanDist(point, centroid);
        if(this->indexOf(point) == 0)
        {
            minDist = dist;
            NearestPointToCentroidIndex = this->indexOf(point);
        }
        else
        {
            if(minDist > dist)
            {
                minDist = dist;
                NearestPointToCentroidIndex = this->indexOf(point);
            }
        }
    }
    return(this[NearestPointToCentroidIndex]);
}

Куда: Point centorid;float X;float Y;int Id; являются частными переменными класса PointCollection. В конструкторе я определяю:

PointCollection::PointCollection()
{
    //centorid = new Point;
    Id = PointT.GetId();
    X = PointT.GetX();
    Y = PointT.GetY();
}

А также

float Point::calculateEuclideanDist(Point point_1, Point point_2)
{
    float x1 = point_1.x, y1 = point_1.y;
    float x2 = point_2.x, y2 = point_2.y;

    float dist = qSqrt(qPow(x2 - x1, 2.0) + qPow(y2 - y1, 2.0));


    return (dist);
 }

1 ответ

Решение

Проблема в том, что для реализации indexOf QVector должен знать, как сравнивать точки на равенство (иначе как найти точку в векторе). Для этого используется оператор ==, но вы не написали оператор == для класса Point, поэтому вы получаете эту ошибку. Просто напишите operator == для Point (и оператор!= Тоже будет хорошей идеей).

bool operator==(const Point& x, const Point& y)
{
    // your code here
}

bool operator!=(const Point& x, const Point& y)
{
    return !(x == y);
}
Другие вопросы по тегам