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

Я определил класс 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);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]