Перегруженный оператор не обнаружен - PullRequest
5 голосов
/ 11 июня 2011

Сначала немного вернемся, я создал двусвязный список, используя шаблоны. У меня есть класс «account», в котором я перегружен оператор «==» для сравнения идентификаторов аккаунта. Я создал связанный список для хранения учетных записей.

Когда я добавляю новую учетную запись в список, она вызывает «содержит?» метод, который вызывает оператор ==. Это где ошибка вызывается и g ++ говорит мне

sll.h: В функции-члене ‘bool list :: содержит (T) [с T = account]’:

customer.h: 25: 35: создается отсюда

sll.h: 261: 3: ошибка: нет совпадения для оператора «==» в «temp-> node :: data == item»

account.h: 36: 6: примечание: кандидат: bool account :: operator == (account &)

Я занимаюсь расследованием уже несколько часов и не могу до конца разобраться. Я подозреваю, что это может быть связано с тем фактом, что я использую шаблоны. Я создал тестовую программу, чтобы проверить, правильно ли я перегружаю оператор, и она работает, как и ожидалось.

Также обратите внимание: есть класс клиента, в котором содержится список учетных записей, и этот метод называется «добавить». К сожалению, я не могу опубликовать более двух гиперссылок, так что поверьте мне на слово, что этот класс создан правильно. = Р

Поскольку код несколько длинный, я использовал pastie:

Класс связанного списка

Класс учетной записи

1 Ответ

6 голосов
/ 11 июня 2011

Ваш оператор == принимает правильный аргумент как неконстантную ссылку, когда вы пытаетесь сравнить с параметром const. Кстати, ваш оператор == также не является постоянным участником.

  1. Ваш оператор == должен быть постоянным участником и принимать константный ссылочный параметр

  2. Ваш оператор == было бы лучше, если бы он был свободной функцией, иначе два параметра не будут обрабатываться одинаково для преобразования, и у вас есть неявное преобразование из строки в учетную запись.

  3. Действительно ли требуется неявное преобразование?

  4. У вас есть общедоступные данные. Это действительно нужно?

...