class Polinom {
public:
std::vector<double> vect;
Polinom operator +(const Polinom &that) {
if (this->vect.size() > that.vect.size()) {
for (int i = that.vect.size(); i < this->vect.size(); i++)
that.vect.push_back(0);//here
}
else if (that.vect.size() > this->vect.size()) {
for (int i = this->vect.size(); i < that.vect.size(); i++)
this->vect.push_back(0);
}
std::vector<double> sum;
std::vector<double>::iterator i2 = that.vect.begin();//here
for (std::vector<double>::iterator i1 = this->vect.begin(); i1 != this->vect.end(); ++i1)
sum.push_back(*i2++ + *i1);
return sum;
}
Polinom();
Polinom(std::vector<double> vect) {
this->vect = vect;
}
~Polinom();
};
Severity Code Description Project File Line Suppression State Error (active) E1087 no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back [with _Ty=double, _Alloc=std::allocator]" matches the argument list and object (the object has type qualifiers that prevent a match)
Polinom operator +(const Polinom &that) { ^^^^^
that is a const reference.
that.vect.push_back(0);//here
Since that is const, so are member access expressions through that reference. Thus that.vect is a const expression.
push_back is a non-const member function. It modifies the vector. The function cannot be called on const vectors.
std::vector<double>::iterator i2 = that.vect.begin();//here
std::vector<T>::begin() const returns a std::vector<T>::const_iterator. It is not implicitly convertible to std::vector<T>::iterator
Solution 1: Don't attempt to push elements into const vectors.
Solution 2: Use a non-const reference when you intend to modify the referred object.
In this case, solution 1. seems to be more sensible. Modifying operands of operator+ would be counter intuitive. Furthermore, you should probably make the function const qualified, and avoid modifying this, for the same reason.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With