7

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

Я попытался изменить ход событий, но я constanly получаю те же ошибки, что и выше

Любые советы или помощь по этому вопросу очень ценится.

+0

Вам необходимо sqlist Flexo

+0

И если это функция-член, она принимает одно искусство и использует это – Flexo

+0

@awoodland: Нет, вы этого не сделаете; внутри определения шаблона класса, только имя шаблона может ссылаться на текущий экземпляр шаблона. И в любом случае код «T» в коде OP отсутствует. –

ответ

7

Оператор-член имеет только один аргумент, который является другим объектом. Первый объект сам экземпляр:

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;.

0

Вы объявляете перегрузку == как часть определения класса, поскольку экземпляры метода получат. Таким образом, первый запрошенный вами параметр, lhs, уже неявный: помните, что в рамках методов экземпляра у вас есть доступ к this. Метод

class myClass { 
    bool operator== (myClass& other) { 
     // Returns whether this equals other 
    } 
} 

Оператор ==() как часть класса следует понимать как «этот объект знает, как сравнивать себя с другими».

Вы можете перегрузить operator ==() вне класса, чтобы получить два аргумента, причем оба объекта сравниваются, если это имеет для вас больше смысла. Смотрите здесь: http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

0

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 объекты все самостоятельно.

Смежные вопросы