运算符过载:多重矩阵

时间:2017-03-25 13:38:08

标签: c++ matrix operator-overloading

我正在尝试为矩阵设置一些重载运算符函数,我使用构造函数动态分配它们,并使用istream运算符来设置值。我在尝试乘以两个矩阵时遇到了问题(运行时错误)。

任何帮助将不胜感激。 ps:我不熟悉模板。

这是我的*运算符函数:

matrixType operator*(matrixType m)
{
    if( Rows==m.Cols && Cols==m.Rows)
    {
        matrixType m3(Rows,m.Cols);
        for( int i=0; i<Rows;i++)
        {
            for( int j=0; j<Cols; j++)
            {
                {
                  for(int g=0; g<Cols;g++)
                      m3.matrix[i][j]+=matrix[i][g] * m.matrix[g][j];
                }
            }
        }
        return m3;
    }
}

这是我的复制操作员功能:

matrixType& operator=( matrixType& m)
{
    for (int i =0; i<Rows; i++)
    {
         for ( int j=0; j<Cols; j++)
                matrix[i][j]=m.matrix[i][j];
    }

    return *this;
}

2 个答案:

答案 0 :(得分:0)

我认为如果在运行代码时发布一些运行时错误会更好。无论如何,我在Multiply运算符函数中发现了一个问题:

当你返回m3时,它在另一个范围内定义,因此没有定义,你如何将return m3语句放在if范围内:

matrixType operator*(matrixType m)
{
    if( Rows==m.Cols && Cols==m.Rows)
    {
        matrixType m3(Rows,m.Cols);
        for( int i=0; i<Rows;i++)
        {
            for( int j=0; j<Cols; j++){
                    {for(int g=0; g<Cols;g++)
                    m3.matrix[i][j]+=matrix[i][g] * m.matrix[g][j];}
        }
        return m3;
    }
      // Throw some error if your assertion is not satisfied, perhaps
    }
}

答案 1 :(得分:0)

您在10.43.95.16循环中使用了错误的Cols。你想要j

m.Cols

查看for (for( int j=0; j<m.Cols; j++) ij变量用于下标的位置,以查看3个循环的限制值。