我有矩陣類和兩個構造函數 - 一個有參數(行,列,數字),例如矩陣c(4,4,4)將創建4x4矩陣並填充它與數字4.重載ostream操作符從文件打印矩陣
第二個構造函數是從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;}
}
}
_works的第一構造函數,但第二one_不起作用。我只看到一個構造函數。 –
呵呵,真的很抱歉,我加了他 – NeviJ