簡體   English   中英

運算符重載:多矩陣

[英]Operator overload: Multuplying matrices

我試圖為矩陣設置一些重載運算符,在這里我使用構造函數動態分配它們,並使用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;
}

我認為如果在運行代碼時發布一些運行時錯誤會更好。 無論如何,我在您的乘運算符函數中發現了一個問題:

當您返回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
    }
}

您在j循環中使用了錯誤的Cols 您要在m.Colsm.Cols

for (for( int j=0; j<m.Cols; j++)

查看ijg變量用於下標的位置,以查看3個循環的極限值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM