矩阵乘法与类运算符

时间:2016-06-08 15:08:34

标签: c++ class matrix

我正在研究矩阵的乘法 它就像是

m5 = m2 * m3;
cout << "m2 * m3 is : " << endl<< m5 << endl;

这是我的代码

const Matrix Matrix::operator*(const Matrix &a)
{
   Matrix temp(a.row,a.col);
   for (int i = 0; i<row; i++)
   {
      for (int j = 0; j<col; j++)
      {
        for (int k = 0; k<a.row; k++)
        {
            temp.data[i][j] = temp.data[i][j] + data[i][k] * a.data[k][j];
        }
      }
  }
 return temp;
}

但是,我的打印功能始终显示错误

ostream& operator<<(ostream &output, const Matrix &a)
{
   for (int i = 0; i < a.row; i++)
   {
      for (int j = 0; j < a.col; j++)
      {
        output << a.data[i][j] << "\t";
      }
    output << "" << endl;
   }
   return output;
} 

似乎a.data [i] [j]上有问题,我不知道问题是什么 它在添加时工作正常。 它显示错误{data0x005fba90 {0xfeeefeee {???}} 任何人都可以就这种情况提出任何建议或建议或帮助 这是我的复制构造函数

 Matrix::Matrix(const Matrix&m2)
{
  row = m2.row;
  col = m2.col;
  setUp(row, col);
  for (int i = 0; i<row; i++)
  {
      for (int j = 0; j<col; j++)
      {
          data[i][j] = 0;
      }
  }  
  for (int i = 0; i < row; i++)
  {
      for (int j = 0; j < col; j++)
      {
        data[i][j] = m2.data[i][j];
      }
  }
}

这是设置和默认

Matrix::Matrix()
{
 row =0;
 col = 0;
 for (int i = 0; i<row; i++)
 {
    for (int j = 0; j<col; j++)
    {
        data[i][j] = 0;
    }
 }

}
Matrix::Matrix(int a, int b, double d[], int c)
{
 row = a;
 col = b;
 setUp(row, col);
 int counter = 0;
 for (int i = 0; i < row; i++)
 {
    for (int j = 0; j < col; j++)
    {
        data[i][j] = d[counter];
        counter++;
    }
 }
 }

和设置

 void Matrix::setUp(int a, int b)
{
 row = a;
 col = b;
 data = new double*[row];
 for (int i = 0; i < row; i++) data[i] = new double[col];
 }

1 个答案:

答案 0 :(得分:0)

在没有看到你的Matrix构造函数或类定义的情况下,很难确定,但如果你看一下这个表达式

temp.data[i][j] + data[i][k] * a.data[k][j]

根据data的内容,如果您在创建data时未在构造函数中显式初始化temp成员,则其内容不会自动初始化,并且内容将不确定并使用它将导致未定义的行为

另一个可能的问题来源可能是缺少复制构造函数或错误的复制构造函数。这是一个问题,因为您通过值返回temp来调用复制构造函数。