Стоит задача реализации калькулятора многочленов. Я реализовываю класс многочлена следующим образом:
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
PolynomEntry() = default;
PolynomEntry(long c, Variable v) : coeff(c)
{
var.push_back(v);
}
PolynomEntry(long c, std::vector
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
Которые отсылают меня в глубины файла xutility. Гугление привело к выводу, что я как-то неправильно реализовал сравнение своих пользовательских типов и оператор сравнения вектора не может это переварить, но как реализовать правильно то, что нужно мне не имею никакого понятия.
Ответ
bool operator == (Variable & other);
bool operator == (const Variable &other) const;
С остальными аналогично.
И ещё я бы рекомендовал реализовать operator <
Комментариев нет:
Отправить комментарий