Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 算子重载:多重矩阵_C++_Matrix_Operator Overloading - Fatal编程技术网

C++ 算子重载:多重矩阵

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(

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

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

这是我的*运算符函数:

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。请花一些时间阅读帮助页面,特别是名为和的部分。更重要的是,请阅读。您可能还想了解。