Вопрос

В настоящее время я работаю над созданием перегруженной функции для оператора ==. Я создаю файл 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 - это все ваши.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top