2014-07-18 668 views
0

我創建了一個名爲ArrayCreator的類來動態分配2D數組。然而,當我運行的main.cpp輸出二維數組的特定元素,編譯器會顯示以下錯誤信息:錯誤:'operator []'不匹配'

error: no match for 'operator[]' (operand types are 'ArrayCreator' and 'int')

詳情請參閱下面的代碼:

main.cpp: 

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

using namespace std; 

int main() 
{ 
    ArrayCreator arr; 
    arr.initArray(); 
    cout<<arr[4][5]<<endl; 
    return 0; 
} 

--------------------------------------------------------- 

Header File: 

#ifndef ARRAYCREATOR_H 
#define ARRAYCREATOR_H 
#define row 4 
#define col 10 

class ArrayCreator 
{ 
    int** arr; 
public: 
    ArrayCreator(); 
    void initArray(); 
    ~ArrayCreator(); 
}; 

#endif // ARRAYCREATOR_H 

--------------------------------------------------------- 

Implementation File: 

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

ArrayCreator::ArrayCreator(){ 
    arr=new int*[row]; 
    for(int i=0; i<row; i++){ 
     arr[i]=new int[col]; 
    } 
} 

ArrayCreator::~ArrayCreator(){ 
    for(int i=0; i<row; i++) { 
     delete [] arr[i]; 
     arr[i]=NULL; 
    } 
    delete [] arr; 
    arr=NULL; 
} 

void ArrayCreator::initArray(){ 
    for(int i = 0; i < row; i++){ 
     for(int j = 0; j < col; j++){ 
      arr[i][j]=i*j; 
     } 
    } 
} 
--------------------------------------------------------- 
+2

您還沒有定義'操作符[](INT)'你'ArrayC reator'類。 – user657267

+0

您的意思是當我創建ArrayCreator類的對象時,我不能將此對象視爲正常的2D數組?爲了訪問這個2D數組的任何特定元素,我需要定義另一個函數運算符[](int)? – yangfeiyun

+2

@楊飛雲,這就對了。 –

回答

1

您需要無論是在公共移動成員arr,並用它喜歡:arr.arr[1][1]或ArrayCreator定義operator[](int)

int* operator[](int index) 
{ 
    return arr[index]; 
}