Ваш operator*
является функцией-членом. Когда вызывается так:
some_ppm * 1.2
Здесь 1.2
это ваш double rhs
.
Но каков ваш lhs
?
Глядя на вашу функцию,левая сторона - , а не some_ppm
. Взгляните:
PPM& PPM::operator*(const double& rhs) const {
// ...
PPM lhs;
// ...
return lhs;
}
В этом случае lhs
всегда является локальным , новым экземпляром из PPM
.
Так где же real rhs
?
Помните, что когда вы вызывали перегруженный оператор, вы фактически вызываете функцию-член:
some_ppm.operator*(1.2) // actually well formed syntax
И да, выугадал, это this
. И ваш оператор не должен возвращать ссылку на PPM
, но вместо этого должен делать double
или int
или даже std::string
и возвращать копию :
//v----- return by value
PPM PPM::operator*(const double& rhs) const {
int height = this->getHeight();
int width = this-> getWidth();
int mc = this-> getMaxColorValue();
PPM result;
// ...
return result;
}