Ваша функция-член должна быть const
-квалифицирована:
bool operator<(const Node<T>& rhs) const{
РЕДАКТИРОВАТЬ
Для каждого запроса, здесь немного больше, как я узнал, что вам нужно сделать функцию-членconst
.
Разделение скрытых значений в ошибках компилятора, связанных с stdlib, - это что-то вроде искусства и то, к чему вы лучше относитесь с практикой.Ошибки, связанные с stdlib, часто приводят к целой серии ошибок компилятора.Обычно самая полезная из этих ошибок - последняя, потому что она генерируется из контекста кода, который вы на самом деле написали, а не из недр кода библиотеки.
В этом случае последняяошибка компилятора:
graphBuilder.cpp: 10: 17: создается здесь /usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../include/c++/4.5.2/bits/stl_algo.h:2211:4: ошибка: передача 'const Node >' в качестве 'this' аргумента 'bool Node:: operator <(const Node &) [с T = std :: basic_string] '<strong> отбрасывает квалификаторы
Я выделил светящиеся биты.Это говорит мне о том, что в реальном коде OP из-за того, как код построен (возможно, вызов sort
сам по себе в const
функции-члене? Кто знает ...) указатель this
должен быть const
,но, как мы видим из опубликованного объявления operator<
, метод не const
.«Квалификаторы», упоминаемые в ошибках компилятора, - это то, что Стандарт называет «cv-квалификаторами».«cv» означает «const / volatile».
Когда компилятор говорит «Передача const X
как this
в Node::operator<
сбрасывает квалификаторы», он действительно пытается сказать:
«Вы сказали, что X
был постоянным, но затемВы пытались вызвать неконстантную функцию-член через const X
. Чтобы сделать этот вызов, мне нужно было бы сбросить квалификатор const на X
. Мне не разрешено делатьэто значит, что вы должны исправить свой код. "
Квалификаторы, которые здесь" отбрасываются ", являются квалификаторами самого метода.Другими словами, operator<
должна быть константной функцией-членом, но это не так.