[英]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.Cols
有m.Cols
:
for (for( int j=0; j<m.Cols; j++)
查看i
, j
和g
變量用於下標的位置,以查看3個循環的極限值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.