【问题标题】:Overloading ostream operator to print matrix from file重载 ostream 运算符以从文件中打印矩阵
【发布时间】:2016-12-12 16:06:31
【问题描述】:

我有矩阵类和两个构造函数——一个有参数(行、列、数字),例如矩阵 c(4,4,4) 将创建 4x4 矩阵并用数字 4 填充它。

第二个构造函数正在从 txt 文件中读取矩阵,如果我在构造函数中打印它一切正常,但我想重载 ostream

这是我的代码,感谢您的建议和帮助。

ostream & operator <<(ostream &o, const matrix &m)
{
  for(int r=0; r<m.rows;r++)
  {
    for(int c=0; c<m.cols;c++)
    {
        o<<m.mat[r][c]<<" ";
    }

   o<<endl;
  }

  return o;
}



matrix::matrix(const char* file_name)
{
  int rows=0;
  int cols=0;
  FILE *fp;
  fp=fopen(file_name,"rb");
  fseek(fp,0,SEEK_SET);
  fscanf(fp,"%d",&rows);
  fscanf(fp,"%d",&cols);

  mat=new double*[rows];

  for(int i=0;i<rows;i++)
  {
     mat[i]=new double[cols];
  }

  for(int k=0;k<rows;k++)
  {
    for(int j=0;j<cols;j++)
    {
        fscanf(fp,"%lf",&mat[k][j]);
        //cout<<mat[k][j]; it works.
    }
    cout<<endl;
  }
}

编辑:添加第一个构造函数:

matrix::matrix(int r, int c, double n)
{
  rows=r;
  cols=c;
  mat= new double*[rows];
  for(int i=0;i<rows;i++)
  { 
    mat[i]=new double[cols];}

  for(int k=0;k<rows;k++)
  {
    for(int j=0;j<cols;j++)
    {
        mat[k][j]=n;}
  }
}

【问题讨论】:

  • 适用于第一个构造函数,但不适用于第二个构造函数。我只看到一个构造函数。
  • 真的很抱歉,我加了他

标签: c++ file matrix operator-overloading


【解决方案1】:

您的“不工作”构造函数似乎确实有错误。那是因为你已经将rowscols定义为局部变量,所以矩阵对象的members rows and cols没有设置。

尝试删除那些本地定义,以便引用的行和列实际上是对象的数据成员。删除行:

int rows=0;
int cols=0;

或者将它们替换为:

rows = cols = 0;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2018-10-16
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多