我将尝试重载运算符以将PPM图像相加,从而创建一个新的图像。然而,在尝试在函数中创建新对象时,遇到了问题。
PPM& PPM::operator*(const double& rhs) const {
int height = this->getHeight();
int width = this-> getWidth();
int mc = this-> getMaxColorValue();
PPM lhs;
// ...
return lhs;
}
还有很多其他的内容,最后一行是return(lhs);
当我尝试编译代码时,会出现一个错误,提示:
error: reference to local variable 'lhs' returned [-Werror=return-local-addr] PPM lhs;
出了什么问题?
PPM&
而不是PPM
,有什么原因吗? - walnutlhs
的引用将导致悬空引用,因为它超出了作用域。 - UnholySheeplhs
的临时变量。当您返回对lhs
的引用时,初始对象将被删除,因此引用将是垃圾,编译器会警告您。您需要通过值返回。 - Alex HuszaghPPM&
。 - Fading3clipseoperator*
来说,这种情况非常不寻常。operator*=
通常返回一个引用,但是operator*
通常会返回一个值。我不知道在这里返回引用会有什么意义。 - walnutoperator*
进行按引用返回。 - Alex Huszagh