2017-09-03 54 views
1

我想重载*运算符有两个目的:对于多操作数重载运算符*

第一个目的:

m4 * 3.5; //m4 is a matrix object 

上述作品具有这种功能,绝对没有在这里实施

问题
Matrix operator *(const double n) 

然而,当我试图反向,即

3.5 * m4; 

我得到一个错误,说没有匹配的函数。所以,我对这种特殊情况下作出这一功能

Matrix operator *(const double n, Matrix &obj) 
{ 
    for(unsigned int i = 0; i < rows; i++) 
    { 
     for(unsigned int j = 0; j < cols; j++) 
     { 
      obj[i][j] = obj[i][j] * n; 
     } 

    } 

    return *this; 
} 

现在,我得到的错误:

error: ‘Matrix Matrix::operator*(double, Matrix&)’ must take either zero or one argument Matrix operator *(const double n, Matrix &obj);

error: no match for ‘operator*’ (operand types are ‘double’ and ‘Matrix’)
cout << 3.5 * m4 << endl;

我不知道如何克服操作数的问题!

不幸的是我不能使用BLAS,Eigen之类的东西。这项任务要求我们努力通过这个矩阵废话。

+0

请不要编辑我的帖子只是为了纠正我的语法和不正确的大写。我在这里为编程帮助而不是英语课。这些错误并不妨碍任何人理解我的代码的能力! – Jaydie

回答

3

您已使Matrix operator *(const double n, Matrix &obj)成为Matrix的成员,这意味着它具有隐含的第一个参数this。你需要做的是使它成为一个非成员函数。

还要注意的是它不应该修改操作数,所以你应该通过const引用传递Matrix

Matrix operator *(const double n, const Matrix &obj); 

同样可以为你的第一个重载可以说,这要么是一个const成员函数

Matrix operator *(const double n) const; 

或也非会员:

Matrix operator *(const Matrix& mat, const double n); 
+0

当我使它成为一个非成员函数时,它给了我这个错误:“未定义的引用到operator *(double,Matrix const&)'”,我也向前声明了Matrix类,但这似乎没有帮助。 – Jaydie

+0

@Jaydie你犯了一些其他的错误。 SO在未定义的参考文献中有大量的Q/As。 – juanchopanza