того, чтобы сравнивать элементы передаю экземпляр класса IComparer<T>:
template<class T>
class ICompirer
{
public:
virtual int Compare(T x, T y);
};
чтобы в коде программы выбрать необходимый способ сортировки я создаю новый класс и делаю public наследование от него:
class cmp : public ICompirer<int>
{
public:
virtual int compare(int x, int y)
{
if (x > y)
return 1;
if (x == y)
return 0;
return -1;
}
};
сортировку вызываю как-то так:
cmp comparer;
list4.sort(comparer);
выдает ошибку линковки. Что делаю не так?
У тебя Compare не реализован
Compare и compare
А Compare должен быть чисто виртуальным, раз у тебя интерфейс
virtual int compare(..) = 0; В интерфейсе Это аналог abstract
Во-первых надо тебе сказать, что интерфейс ICOmpirer тебе тут абсолютно не нужен. ...
Во-вторых, что сортировка списков -- вещь вредная.
В третьих, что этот код стилистически очень странный. virtual int compare(int x, int y) { if (x > y) return 1; if (x == y) return 0; return -1; } Надо было return x - y;
Если ты ещё не разобрался, то шли код и ошибки.
Обсуждают сегодня