Перегрузка функции ==
-
27-10-2019 - |
Вопрос
В настоящее время я работаю над созданием перегруженной функции для оператора ==. Я создаю файл HPP для моего связанного списка, и я не могу заставить этого оператора работать в файле HPP.
В настоящее время у меня есть:
template <typename T_>
class sq_list
{
bool operator == ( sq_list & lhs, sq_list & rhs)
{
return *lhs == *rhs;
};
reference operator * () {
return _c;
};
};
}
Я получаю около 10 ошибок, но они в значительной степени повторяются как ошибки:
C2804: бинарный «оператор ==» имеет слишком много параметров
C2333: 'sq_list :: operator ==': ошибка в объявлении функции; пропуск функции корпуса
C2143: Синтаксис ошибка: отсутствует ';' до '*'
C4430: Отсутствующий тип спецификатор - Int предполагается. Примечание: C ++ не поддерживает по умолчанию.
Я пытался изменить ситуацию, но я постоянно получаю те же ошибки, что и выше
Любые советы или помощь по этому поводу высоко ценится.
Решение
У оператора участника есть только один аргумент, который является другим объектом. Первый объект - сам экземпляр:
template <typename T_>
class sq_list
{
bool operator == (sq_list & rhs) const // don't forget "const"!!
{
return *this == *rhs; // doesn't actually work!
}
};
Это определение на самом деле не имеет смысла, так как оно просто рекурсивно называется. Вместо этого это должно вызвать работу по какой -то участнику, например return this->impl == rhs.impl;
.
Другие советы
Вы объявляете перегрузку == как часть определения класса, как получат экземпляры метода. Таким образом, первый параметр, который вы запрашиваете, lhs
, уже подразумевается: помните, в методах экземпляра, которые у вас есть доступ к this
.
class myClass {
bool operator== (myClass& other) {
// Returns whether this equals other
}
}
Метод оператора == () как часть класса следует понимать как «этот объект знает, как сравниться с другими».
Вы можете перегружать оператор == () вне класса, чтобы получить два аргумента, оба объекта сравниваются, если это имеет больше смысла для вас. Глянь сюда:http://www.learncpp.com/cpp-tutorial/94-overload-the-comparison-operators/
http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html
Операторы сравнения очень просты. Определите == Сначала, используя подпись функции, как это:
bool MyClass::operator==(const MyClass &other) const {
... // Compare the values, and return a bool result.
}
Как сравнить объекты MyClass - это все ваши.