Polinom operator +(const Polinom &that) {
^^^^^
that
является константной ссылкой.
that.vect.push_back(0);//here
Поскольку that
является константой, то и выражения доступа к члену через эту ссылку,Таким образом, that.vect
является константным выражением.
push_back
является неконстантной функцией-членом.Это изменяет вектор.Функция не может быть вызвана для константных векторов.
std::vector<double>::iterator i2 = that.vect.begin();//here
std::vector<T>::begin() const
возвращает std::vector<T>::const_iterator
.Это неявно преобразуется в std::vector<T>::iterator
Решение 1. Не пытайтесь вставлять элементы в константные векторы.
Решение 2. Используйте неконстантную ссылку, если вы собираетесь изменитьупомянутый объект.
В этом случае решение 1. представляется более разумным.Модификация операндов operator+
была бы нелогичной.Кроме того, вы, вероятно, должны сделать функцию const квалифицированной и избегать изменения this
по той же причине.