C++ 算子重载:多重矩阵
我试图为矩阵设置一些重载运算符函数,其中我使用构造函数动态分配它们,并使用istream运算符设置值。我在尝试将两个矩阵相乘时遇到了一个问题(运行时错误) 任何帮助都将不胜感激。 附言:我不熟悉模板 这是我的*运算符函数:C++ 算子重载:多重矩阵,c++,matrix,operator-overloading,C++,Matrix,Operator Overloading,我试图为矩阵设置一些重载运算符函数,其中我使用构造函数动态分配它们,并使用istream运算符设置值。我在尝试将两个矩阵相乘时遇到了一个问题(运行时错误) 任何帮助都将不胜感激。 附言:我不熟悉模板 这是我的*运算符函数: matrixType operator*(matrixType m) { if( Rows==m.Cols && Cols==m.Rows) { matrixType m3(Rows,m.Cols); for(
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;
}
matrixType运算符*(matrixType m)
{
if(Rows==m.Cols&&Cols==m.Rows)
{
矩阵类型m3(行,m.Cols);
对于(int i=0;i我认为如果在运行代码时发布一些运行时错误会更好。无论如何,我在乘法运算符函数中发现了一个问题:
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
}
}
matrixType运算符*(matrixType m)
{
if(Rows==m.Cols&&Cols==m.Rows)
{
矩阵类型m3(行,m.Cols);
对于(int i=0;i您在j
循环中使用了错误的Cols
。您希望m.Cols
在那里:
for (for( int j=0; j<m.Cols; j++)
for(for(int j=0;jj)您没有提到有关错误的任何细节,但最常见的问题是在动态分配成员时不遵循“三个规则”(google it)。不过最好使用std::vector
,因为这样可以遵循“零规则”。您好,欢迎使用StackOverflow。请花一些时间阅读帮助页面,特别是名为和的部分。更重要的是,请阅读。您可能还想了解。