2016-12-12 52 views
0

我有矩陣類和兩個構造函數 - 一個有參數(行,列,數字),例如矩陣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;} 
    } 
} 
+0

_works的第一構造函數,但第二one_不起作用。我只看到一個構造函數。 –

+0

呵呵,真的很抱歉,我加了他 – NeviJ

回答

1

好像你的 「不工作」 的構造確實有錯誤。這是因爲您已將rowscols定義爲局部變量,因此未設置矩陣對象的members rows and cols

嘗試刪除這些本地定義,以便引用的行和列實際上是對象的數據成員。刪除線:

int rows=0; 
int cols=0; 

,或是更換他們:

rows = cols = 0; 
+0

修好了,謝謝! – NeviJ