C++ 重载*运算符的多个操作数

C++ 重载*运算符的多个操作数,c++,matrix,operator-overloading,overloading,C++,Matrix,Operator Overloading,Overloading,我想重载*运算符,有两个目的: 第一个目的: 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

我想重载*运算符,有两个目的:

第一个目的:

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;
}
矩阵运算符*(常数双n,矩阵和obj)
{
for(无符号整数i=0;i
现在,我得到一个错误:

错误:“矩阵::运算符*(双精度,矩阵&)”必须采用零或一个参数 矩阵算子*(常数双n,矩阵和obj)

错误:“运算符*”不匹配(操作数类型为“双精度”和 “矩阵”)

您可以将
矩阵运算符*(const double n,Matrix&obj)
设置为
矩阵的成员,这意味着它有一个隐式的第一个参数用于
。您需要做的是使其成为非成员函数

还请注意,它不应修改操作数,因此应通过常量引用传递
矩阵

Matrix operator *(const double n, const Matrix &obj);
对于第一个重载也是如此,它应该是const成员函数

Matrix operator *(const double n) const;
或非成员:

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

请不要编辑我的文章只是为了纠正我的语法和不正确的大写字母。我是来帮你编程的,不是来上英语课的。这些错误并没有妨碍任何人理解我的代码!当我将其设置为非成员函数时,它会给我以下错误:“未定义对`operator*(double,Matrix const&')的引用”,我还向前声明了Matrix类,但这似乎没有帮助。@Jaydie您犯了一些其他错误。所以在未定义的引用上有很多Q/A。