2017-01-14 49 views
1

我無法理解標題中的問題。 所以我有兩個類,一個3雙打的矢量和一個2D動態矩陣,每個單元格都有一個Vector對象。 Matrix的構造函數工作並不會拋出錯誤。但是,當我想引用在ostream過載中創建的Matrix實例的單元時,我得到爲什麼operator []在初始化時工作,在引用2d動態數組時不起作用

「不匹配'operator []'(操作數類型是'Matrix'和'int') 「

爲什麼在初始化期間使用[] []表示法並且稍後不確定? 是否有一個適度的直接方法來解決這個問題? 非常感謝!

class Vector{ 
private: 
double x, y, z; 

public: 
Vector(){ 
    x = y = z = 0; 
} 
Vector(int x_, int y_, int z_){ 
    x = x_; 
    y = y_; 
    z = z_; 
} 
friend ostream &operator<< (ostream &wyj, Vector &v); 
friend istream &operator>> (istream &wej, Vector &v); 
}; 
    /// ===== MATRIX CLASS CONSISTS OF VECTOR OBJECTS 
class Matrix{ 
private: 
Vector ** M; 
int row; 
int col; 

public: 
Matrix(int col, int row){ 
    M = new Vector * [row]; 
    for(int i = 0; i < row; i++){ 
     M[i] = new Vector[col]; 
    } 
    for(int i = 0; i < row; i++){ 
     for(int j = 0; j < col; j++){ 
      M[i][j] = Vector(); 
     } 
    } 
} 

friend ostream &operator<< (ostream &wyj, Matrix &M); 

}; 

ostream &operator<< (ostream &wyj, Matrix &M){ 

for(int i = 0; i < M.row; i++){ 
    for(int j = 0; j < M.col; j++){ 
     wyj << M[i][j] << " "; 
    } 
    wyj<< endl; 
} 
return wyj; 
} 

int main(){ 
    Matrix A(2, 2); 
    cout << A[1][1]; // LURD VADAR SAYZ NOOOOOOOOOOOOOOO 

} 

編輯:< <重載方法

+0

你可能想看看[一些很好的C++材料(http://stackoverflow.com/questions/388242/the-definitive-c-book-指南和列表)給你更好的C++背景。儘管如此,你得到這個錯誤的原因是你沒有爲'Matrix'類重載'operator [](...)',並且它的返回類型也必須支持'[]'。 – WhiZTiM

+0

要在'main()'中使用'A [1] [1]',Matrix類必須提供一個'operator []',它返回一個也有'operator []'的東西。它沒有。 – Peter

+0

我能理解。但是爲什麼當我首先創建數組時,符號本身起作用? – Martin

回答

2

輕微錯別字爲什麼是OK的初始化過程中使用的[] []符號而不是OK 以後呢?

Matrix的構造函數MVector**main()AMatrix。所以[][]對於Vector**是可以的,但對Matrix沒有意義(除非定義)。

有沒有一個適度的直接方法來解決這個問題?

對於[][]工作,你需要有operator[]定義兩次。一次爲第一個對象,一次爲由第一個對象返回的對象operator[]。因此,在Matrix

,你可以包括:

Vector* operator[](size_t index) { return M[index]; } 
+0

基本上飽滿。謝謝你,好的先生:) – Martin

相關問題