我有矩阵类,两个构造函数 - 一个有参数(行,列,数字),例如矩阵c(4,4,4)将创建4x4矩阵并用数字4填充。
第二个构造函数是从txt文件读取矩阵,如果我在构造函数中打印它一切正常,但我想重载ostream<<运算符在main函数中打印矩阵。此运算符适用于第一个构造函数,但不适用于第二个构造函数,它在无限循环中打印随机数。
这是我的代码,感谢任何建议和帮助。
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;}
}
}
答案 0 :(得分:1)
好像你的工作&#34;没有工作&#34;构造函数确实有错误。这是因为您已将rows
和cols
定义为局部变量,因此未设置矩阵对象的members rows and cols
。
尝试删除这些本地定义,以便引用的行和列实际上是您对象的数据成员。删除行:
int rows=0; int cols=0;
或者用以下内容替换它们:
rows = cols = 0;