2013-04-27 57 views
-1

對於類項目我有一個二維數組指針。我理解構造函數,析構函數等,但是我在理解如何設置數組中的值時遇到了問題。我們使用重載輸入操作符來輸入值。 這裏是我有那個運營商至今代碼:使用指針數組重載輸入操作符

istream& operator>>(istream& input, Matrix& matrix) 
{ 
bool inputCheck = false; 
int cols; 

while(inputCheck == false) 
{ 
    cout << "Input Matrix: Enter # rows and # columns:" << endl; 

    input >> matrix.mRows >> cols; 
    matrix.mCols = cols/2; 

    //checking for invalid input 
    if(matrix.mRows <= 0 || cols <= 0) 
    { 
     cout << "Input was invalid. Try using integers." << endl; 
     inputCheck = false; 
    } 
    else 
    { 
     inputCheck = true; 
    } 

    input.clear(); 
    input.ignore(80, '\n'); 
} 

if(inputCheck = true) 
{ 
    cout << "Input the matrix:" << endl; 

    for(int i=0;i< matrix.mRows;i++) 
    { 
     Complex newComplex; 
     input >> newComplex; 
     matrix.complexArray[i] = newComplex; //this line 
    } 
} 
return input; 
} 

顯然賦值語句我這裏是不正確的,但我不知道它是如何工作的。如果需要包含更多代碼,請告訴我。 這是主要的構造是什麼樣子:

Matrix::Matrix(int r, int c) 
{ 
if(r>0 && c>0) 
{ 
    mRows = r; 
    mCols = c; 
} 
else 
{ 
    mRows = 0; 
    mCols = 0; 
} 

if(mRows < MAX_ROWS && mCols < MAX_COLUMNS) 
{ 
    complexArray= new compArrayPtr[mRows]; 

    for(int i=0;i<mRows;i++) 
    { 
     complexArray[i] = new Complex[mCols]; 
    } 
} 
} 

,這裏是Matrix.h所以你可以看到屬性:

class Matrix 
{ 
friend istream& operator>>(istream&, Matrix&); 

friend ostream& operator<<(ostream&, const Matrix&); 

private: 
    int mRows; 
    int mCols; 
    static const int MAX_ROWS = 10; 
    static const int MAX_COLUMNS = 15; 
    //type is a pointer to an int type 
    typedef Complex* compArrayPtr; 
    //an array of pointers to int type 
    compArrayPtr *complexArray; 

public: 

    Matrix(int=0,int=0); 
      Matrix(Complex&); 
    ~Matrix(); 
    Matrix(Matrix&); 

}; 
#endif 

我得到的錯誤是「不能轉換的複雜在矩陣:: compArrayPtr(aka Complex *)在任務中「如果任何人都可以解釋我做錯了什麼,我會非常感激。

回答

1

您的newComplexComplex類型的一個對象(值),您試圖將其指定給Complex*指針。

對於這個工作,你應該動態地構造一個複雜:

Complex* newComplex = new Complex(); 
input >> *newComplex; 
matrix.complexArray[i] = newComplex; 

但要注意的是配備了動態分配(內存管理,所有權,共享狀態...)的一切後果。

+0

我覺得指針在這裏有一個數組的含義(所以矩陣是2d數組)。 – Lol4t0 2013-04-27 18:39:25

+0

@ Lol4t0不,'complexArray'是一個指針數組。該變量與下標取消引用,並最終得到一個指針。 – pmr 2013-04-27 18:43:01

+0

謝謝!你的解決方案奏效 – bitva 2013-04-27 18:48:12