Страницы

Поиск по вопросам

воскресенье, 7 июля 2019 г.

Сравнение векторов из пользовательских типов

Стоит задача реализации калькулятора многочленов. Я реализовываю класс многочлена следующим образом:
1) Существует класс переменной, который содержит в себе информацию о букве, которая ее представляет, и степени. Для переменной перегружены операторы == и != и оператор вывода.
Код:
variable.h
class Variable { public: char letter; long int degree;
Variable() = default; Variable(char l, long int d) : letter(l), degree(d) {}
bool operator == (Variable & other); bool operator != (Variable & other);
friend std::ostream & operator << (std::ostream & stream, const Variable & var);
};
variable.cpp
bool Variable::operator == (Variable & other) { return this->degree == other.degree && this->letter == other.letter; }
bool Variable::operator != (Variable & other) { return !((*this) == other); }
2) Существует класс одночлена, который представляет собой коэффициент и вектор из переменных. Для него также перегружены операторы сравнения и оператор вывода.
Entry.h
class PolynomEntry { public: long int coeff; std::vector var;
PolynomEntry() = default; PolynomEntry(long c, Variable v) : coeff(c) { var.push_back(v); } PolynomEntry(long c, std::vector v) : coeff(c), var(v) {}
bool operator == (PolynomEntry & other) { return this->var == other.var; } bool operator != (PolynomEntry & other) { return this->var != other.var; }
friend std::ostream & operator << (std::ostream & stream, const PolynomEntry & entry);
};
Но как только я пытаюсь использовать операторы сравнения через вектора, то получаю ошибки:
Error C2672 'operator __surrogate_func': no matching overloaded function found Error C2893 Failed to specialize function template 'unknown-type std::equal_to::operator ()(_Ty1 &&,_Ty2 &&) const'
Которые отсылают меня в глубины файла xutility. Гугление привело к выводу, что я как-то неправильно реализовал сравнение своих пользовательских типов и оператор сравнения вектора не может это переварить, но как реализовать правильно то, что нужно мне не имею никакого понятия.


Ответ

bool operator == (Variable & other);
bool operator == (const Variable &other) const;
С остальными аналогично.
И ещё я бы рекомендовал реализовать operator <

Комментариев нет:

Отправить комментарий