这是我的问题:
我有两个类 Vector
和 Matrix
,我定义了两个函数,一个用于计算 vector 和矩阵的乘法,另一个用于分配新 vector 的值。
代码如下:
file: Matrix.cpp
Vector Matrix::operator*(const Vector& v)const {
assert(v.length == numRows);
Vector temp(v.length);
for (int j = 0; j < numCols; j++)
for (int k = 0; k < v.length; k++)
temp.contents[j] += v.contents[k] * contents[k][j];
return temp;
};
file: Vector.cpp
Vector& Vector::operator=(Vector& v){
assert(v.length == length);
if (&v != this) {
for (int i = 0; i < length; i++)
setComponent(i, v.contents[i]);
}
return *this;
};
假设我已经很好地定义了一个 4*4 矩阵 m1
和一个 1*4 vector v1
这是我在 main()
函数中的部分代码,
file: main.app
Vector v2(4);
v2 = m1 * v1;
可以编译但是会遇到问题。
谁能给我提示如何处理这个问题?是因为我试图将引用与函数的返回值绑定(bind)吗?非常感谢!
最佳答案
在您的代码中,您定义了这样的赋值运算符 Vector& Vector::operator=(Vector &v)
。但它应该像 Vector& Vector::operator=(Vector const & v)
。原因是 Vector &v
引用了一个 lvalue
引用。但是 m1 * v1
返回一个 rvalue
。
关于c++ - 我们可以将引用绑定(bind)到函数的返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046001/