2017-03-09 33 views
1

我有一個DynamicArrayIterator類這樣無法轉換誤差*操作

template <class T> class DynamicArrayIterator{ 
private: 
    int currentPosition; 
    DynamicArray<T>* array; //pointer to the dynamic array 
    int direction; //1 indicates forward, -1 indicates backwards 
public: 
    DynamicArrayIterator(DynamicArray<T>* dyn, int pos, int dir){ 
    array = dyn; 
    currentPosition = pos; 
    direction = dir; 
    } 
    T operator *(){ 
    T t = array[currentPosition]; 
    return t; 
    } 
    void operator ++(){ 
    this->currentPosition += this->direction; 
    } 

的DynamicArray類被設置爲

template <class T> class DynamicArray{ 

private: 
    T *storage; 
    int cur; //next position available 
    int max; //capacity 
public: 
    DynamicArray(); //constructor 
    ~DynamicArray(); //destructor 
    void add(T item); 
    T remove(int i); 
    int size(); 

/*20*/ T& operator [](int i){ //selected if object called on is not const 
    return storage[i]; 
    } 
    T operator [](int i)const{ //selected if called by a const object 
    return storage[i]; 
    } 
    DynamicArrayIterator<T> begin(){ 
    return DynamicArrayIterator<T>(this, 0, 1); 
    } 
    DynamicArrayIterator<T> end(){ 
    return DynamicArrayIterator<T>(this, this->cur, 1); 
    } 
    DynamicArrayIterator<T> r_begin(){ 
    return DynamicArrayIterator<T>(this, 0, -1); 
    } 
    DynamicArrayIterator<T> r_end(){ 
    return DynamicArrayIterator<T>(this, this->cur, -1); 
    } 
}; 

我有超載*操作麻煩;我希望能夠直接獲取和設置值;我這樣稱呼它:

int main(){ 
    DynamicArray<int> foo; 
    foo.add(3); 
    foo.add(2); 
    cout << foo[1] << endl; 
    foo[1] = 10; 
    cout << foo[1] << endl; 
    DynamicArrayIterator<int> a = foo.begin(); 
    ++a; 
    cout << *a << endl; 
} 

,並收到錯誤

DynamicArray.cpp:98:29: error: cannot convert ‘DynamicArray<int>’ to ‘int’ in initialization 
    T t = array[currentPosition]; 

我要去哪裏錯了?

+0

*你在哪裏得到錯誤(請用例如評論標出)?編譯器告訴你什麼?(請編輯你的問題,包括*完整*輸出,*全*和*未編輯*)? –

回答

2

它應該是

T& operator *() { return (*array)[currentPosition]; } 
0
T t = array[currentPosition]; 

是一個問題,因爲,的array類型是DynamicArray<T>*。因此,array[currentPosition]的類型是DynamicArray<T>

這應該修復它:

T t = (*array)[currentPosition]; 
1

在你的迭代你有DynamicArray<T>* array這意味着array是一個指向DynamicArray<T>。因此,與

T t = array[currentPosition]; 

你告訴編譯器在array + currentPosition位置返回DynamicArray<T>。您不能將其分配到t,因爲t只是一個int而這實際上並不是您想要的,因爲指針只指向一個DynamicArray<T>

你需要的是取消引用到指針,然後訪問諸如

T t = (*array)[currentPosition]; 

元素真的不過你應該返回的引用,以便您可以修改該元素,並且看起來像

T& operator *() 
{ 
    return (*array)[currentPosition]; 
}