我正在尝试为矩阵设置一些重载运算符函数,我使用构造函数动态分配它们,并使用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;
}
答案 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++)
,i
和j
变量用于下标的位置,以查看3个循环的限制值。