у меня есть Polynomial
класс, и я пытаюсь определить operator++
как до, так и после увеличения, а также пытается определить до и после уменьшения, а именно operator--
, Вот фрагмент моего кода:
class Polynomial
{
public:
Polynomial();
Polynomial(vector<int>coeffs);
/*
.
.
.
*/
Polynomial operator++();
Polynomial& operator++ (int unused);
Polynomial operator--();
Polynomial& operator-- (int unused);
/*
.
.
.
*/
private:
vector<int> coefficient;
};
Polynomial Polynomial::operator++()
{
coefficient[0]++;
return *this;
}
Polynomial& Polynomial::operator++ (int unused)
{
Polynomial copy(*this);
coefficient[0]++;
return copy;
}
Polynomial Polynomial::operator--()
{
coefficient[0]--;
return *this;
}
Polynomial& Polynomial::operator-- (int unused)
{
Polynomial copy(*this);
coefficient[0]--;
return copy;
}
Я получаю сообщение об ошибке при попытке сделать что-то подобное в основном:
Polynomial p(
… какой-то вектор …);
cout << p++;
Вы возвращаете ссылки на временные файлы от ваших постфиксных операторов:
Polynomial& Polynomial::operator++ (int unused)
{
Polynomial copy(*this);
coefficient[0]++;
return copy; // returning reference to local variable
}
Это неопределенное поведение. У вас есть возвращаемый тип поста и вы преобразуете его неправильно. Вам нужно что-то вроде этого:
Polynomial& operator++();
Polynomial operator++ (int);
Polynomial& operator--();
Polynomial operator-- (int);
Других решений пока нет …