2017-10-28 106 views
0

類:矩陣運算C++運算符重載程序錯誤

#include <string> 
using namespace std; 

class Matrix{ 
public: 
float **grid; 
Matrix(int r, int c); 
friend istream& operator >>(istream& cin, Matrix & m); 
void setMatrix(); 
void printMatrix(); 
friend ostream& operator <<(ostream& cout, Matrix & m); 
private: 
int row; 
int column; 

}; 

istream& operator >>(istream& cin, Matrix & m); 
ostream& operator <<(ostream& cout, Matrix & m); 

矩陣CPP

#include "Matrix.h" 
#include <iostream> 
#include <string> 
using namespace std; 

//First constructor 
Matrix::Matrix(int r, int c){ 
row=r; // Row size 
column=c; // Column Size 
if(row>0 && column>0) 
{ 
    grid = new float*[row]; // Creating 2d dynamic array 
    for(int i=0; i<row;i++) 
    grid[row] = new float [column]; 

    //Setting all elements to 0 
    for(int i=0; i<row; i++) 
    { 
     for(int j =0; j<column; j++) 
     { 
      grid[i][j]=0; 
     } 


    } 

} 
else{ 
    cout<<"Invalid number of rows or columns!"<<endl; 

} 


} 

//Setting values to the matrix 

void Matrix::setMatrix() 
{ 

for(int i=0; i<row; i++) 
{ 
    for(int j=0;j<column;j++) 
    { 
     cin>>grid[i][j]; 
    } 
} 

} 

//Print matrix 
void Matrix::printMatrix() 
{ 

for(int i=0;i<row;i++) 
{ 
    for(int j=0; j<column; j++) 
    { 
     cout<<grid[i][j]<<" "; 
    } 

    cout<<endl; 

} 
} 

//Istream function 
istream& operator >>(istream& cin, Matrix & m) 
{ 
    m.setMatrix(); 
    return cin; 
} 

//ostream function 
ostream& operator>>(ostream& cout, Matrix & m) 
{ 
    m.printMatrix(); 
    return cout; 

} 

主要功能

#include <iostream> 
#include "Matrix.h" 

using namespace std; 

int main() 
{ 
    Matrix m = Matrix(3,2); 
    cout << m; 
    return 0; 
} 

我想編寫一個程序來進行不同的矩陣這部分代碼應該主要創建一個尺寸爲3 * 2的矩陣和構造函數初始化所有值都爲0並打印矩陣。編譯時,我得到一個「鏈接器命令失敗,退出1」錯誤,我真的不知道如何解決。我怎麼能解決這個問題?

錯誤:架構x86_64的

未定義符號: 「操作符< <(STD :: __ 1 :: basic_ostream> &,矩陣&)」,從引用:在main.o中 LD _main:符號(S)沒有發現建築x86_64的 鐺:錯誤:連接命令失敗,退出代碼1(使用-v看看調用)

+0

複製建築時,作爲文本的全面和完整的輸出,以及*編輯您的問題*展示它。並且請花一些時間[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask),並學習如何創建一個[** Minimal **,Complete和Verifiable示例](http://stackoverflow.com/help/mcve)。 –

+0

輸出運算符簽名應該是'ostream&operator <<(ostream&cout,const矩陣& m);'同時命名參數'cout'不是一個好主意。如何解決你應該閱讀的鏈接器錯誤[https:// stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix)。 – user0042

+0

複製錯誤。將其粘貼到您的問題中。在''''後面加上4個額外的空格,哦,並且你有兩個'>>'實現;不知道這是否是一個轉錄錯誤或者什麼? – Yakk

回答

0

你有錯字的錯誤,改變運營商之一>>

ostream& operator>>(ostream& cout, Matrix & m) 
{ 
    m.printMatrix(); 
    return cout; 
} 

ostream& operator<<(ostream& cout, Matrix & m) { 
    m.printMatrix(); 
    return cout; 

} 
0

而且還

grid = new float*[row]; // Creating 2d dynamic array 
    for (int i = 0; i<row; i++) 
     grid[row] = new float[column]; 

應該

grid = new float*[row]; // Creating 2d dynamic array 
    for (int i = 0; i<row; i++) 
     grid[i] = new float[column];