C++运算符在表达式中重载

SCH*_*011 4 c++ expression overloading operator-keyword

我确信这已经在某个地方得到了解答,但我不知道该搜索什么.

我有以下情况.我创建了一个Vector类并重载了"*"(乘以escalar)和"+"运算符(添加两个向量).现在,以下代码行:

Vector sum = (e_x*u_c) + (e_y*u_r);
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

error: no match for 'operator+' in '((Teste*)this)->Teste::e_x.Vector::operator*(u_c) + ((Teste*)this)->Teste::e_y.Vector::operator*(u_r)'
Run Code Online (Sandbox Code Playgroud)

但是,如果我将此错误行替换为:

Vector aux = (e_x*u_c);
Vector aux2 = (e_y*u_r);
Vector sum = aux + aux2;
Run Code Online (Sandbox Code Playgroud)

我没有任何错误.为什么?这两个表达不是等同的吗?

编辑:这是我的"*"和"+"的定义:]

Vector Vector::operator+(Vector& right)
{
    return Vector(x + right.x, y + right.y, z + right.z);
}
double Vector::operator*(Vector& right)
{
    return this->scalar_product(right);
}
Run Code Online (Sandbox Code Playgroud)

fre*_*low 10

替换Vector& right为const Vector& right.

表达式(e_x*u_c)是一个rvalue,对非const的引用不会绑定到rvalues.

此外,还应标记成员函数本身const:

Vector Vector::operator+(const Vector& right) const
{
    return Vector(x + right.x, y + right.y, z + right.z);
}

double Vector::operator*(const Vector& right) const
{
    return this->scalar_product(right);
}
Run Code Online (Sandbox Code Playgroud)

scalar_product还必须加以标记const.了解更多关于const正确性这里.