Ошибка шаблонного класса C++ с оператором ==

@jozo,

Вы можете проверить приложение https://github.com/jatir/django-rest-framework-last-modified django, чтобы использовать Last-Modified [ 113]

Редактировать:

вы можете проверить пример в каталоге тестов https://github.com/jatir/django-rest-framework-last-modified/blob/master/tests /views.py#L14

5
задан Jon Seigel 8 April 2010 в 02:36
поделиться

6 ответов

Запустите путем чтения текста ошибки точно, как это:

двоичный файл '==': никакой оператор не нашел, который берет левый операнд типа 'запись константы'

Это означает, что это не может найти никого == оператор, который принимает entry введите как его левый операнд. Этот код не действителен:

entry const e;
if (e == foo)

Вы имеете, показал нам код для Вашего класса списка, но это не то, о чем ошибка. Ошибка об отсутствии операторов для entry введите, независимо от того, что это. Любой дает класс operator== функция, или объявляют автономное operator== функция, которая принимает a const entry& как его первый параметр.

struct entry {
  bool operator==(const entry& other) const;
};
// or
bool operator==(const entry& lhs, const entry& rhs);

Я думаю, что последний является предпочтительным стилем.

9
ответ дан 18 December 2019 в 08:31
поделиться

Проблема относится к типу T, который используется в этом экземпляре, не имеющем оператор == определенный. Я предположил бы от Вашего вопроса, что это - класс 'запись'.

Могло бы также случиться так, что класс 'записи' не имеет оператора == определенным правильно для взятия константы entry& в качестве параметра.

6
ответ дан 18 December 2019 в 08:31
поделиться

Это вероятно"const отравление", где использование const в объявлении Вашей поисковой функции вынудит Вас добавить const версии всех нисходящих функций Вы звоните.

В объявленной функции const, this указатель рассматривают const, что означает, что всех участников, которых Вы используете через тот указатель, рассматривают const также. Если Ваш operator == () для любого типа T Вы специализируетесь с, явно не указывает const параметры, Вы получите эту ошибку.

Если Вы не можете удостовериться, что весь Ts, который Вы используете, будет иметь надлежащее operator == () вызовы, я удалил бы спецификаторы константы на шаблонах функции членства.

2
ответ дан 18 December 2019 в 08:31
поделиться

Оператор равенства для пользовательских типов не определяется по умолчанию. Это не имеет никакого отношения к Вашему шаблонному классу, а скорее Вашему struct или class "запись".

Поэтому в необходимо будет переопределить оператор равенства в struct entry или class entry.

С другой стороны, если Вы не хотите вызывать все, что использует тот шаблон для определения оператора равенства, можно изменить шаблонный интерфейс для принятия Компаратора, который делает сравнение равенства.

1
ответ дан 18 December 2019 в 08:31
поделиться

Иногда достаточно записать

...
    if (target == elements[i])
...
0
ответ дан 18 December 2019 в 08:31
поделиться

Тип T, который Вы используете в качестве параметра для этого класса, должен иметь operator==() так как код, который Вы даете, не содержит инстанцирование шаблона его трудное для знания что случилось.

На другой ноте функциональные определения шаблона должны быть в.h файле наряду с классом, или иначе компилятор не смог бы инстанцировать его правильно.

1
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: