Не получается перегрузить оператор сравнения "<".
Использую Qt.
point.h
class Point
{
private:
double x;
double y;
double z;
...
public:
double getX();
double getY();
double getZ();
...
friend bool operator<(Point &first, Point &sec);
}
point.cpp
...
bool Point::operator<(Point &first, Point &sec)
{
return sqrt(first.getX()*first.getX() + first.getY()*first.getY() + first.getZ()*first.getZ()) <
sqrt(sec.getX()*sec.getX() + sec.getY()*sec.getY() + sec.getZ()*sec.getZ());
}
main.cpp
...
QList<Point> list;
...
qSort(list.begin(), list.end());
...
При такой реализации выдает ошибку:
...\point.cpp:23: ошибка: 'bool Point::operator<(Point&, Point&)' must take exactly one argument
bool Point::operator<(Point &first, Point &sec)
^
Если убираю второй аргумент: point.h
...
friend bool operator<(Point &first);
...
point.cpp
...
bool Point::operator<(Point &first)
{
return sqrt(first.getX()*first.getX() + first.getY()*first.getY() + first.getZ()*first.getZ()) <
sqrt(x*x+y*y+z*z);
}
...
То выдает:
...\point.h:46: ошибка: 'bool operator<(Point&)' must take exactly two arguments
friend bool operator<(Point &first);
^
Подскажите в чем проблема, и как сделать что бы работало.
Записываю в .h внутри класса
friend bool operator<(const Point &first, const Point &sec);
в .cpp
bool operator<(Point const &first, Point const &sec){
return sqrt(first.getX()*first.getX() + first.getY()*first.getY() + first.getZ()*first.getZ()) <
sqrt(sec.getX()*sec.getX() + sec.getY()*sec.getY() + sec.getZ()*sec.getZ());
}
Выдает ряд однотипных ошибок (на каждый get)
...\point.cpp:24: ошибка: passing 'const Point' as 'this' argument of 'double Point::getX()' discards qualifiers [-fpermissive]
return sqrt(first.getX()*first.getX() + first.getY()*first.getY() + first.getZ()*first.getZ()) <
^
Объявленный оператор не соответствует реализованному.
friend bool operator<(Point &first, Point &sec); // объявляет его как свободную функци.
соответственно реализация должна быть без префикса класса:
bool operator<(Point &first, Point &sec)
И еще const
не хватает в сигнатуре:
(Point const & first, Point const & sec)
и можно обойтись без friend
и объявлять его вне класса так как оператор вроде как вызывает только общедоступные методы, не требуя доступа к protected
и private
.
Проблема была описанна выше) Смысл программы, что бы находить самое длинное слово 1 строки, которое должно содержаться в 2 других строкахВсе...
На вход даются целые числаНа каждой строке находится какое-то количество этих целых чисел (может и вообще их не быть)