2015-11-03 27 views
0

我被要求用與istream_iterator相同的函數編寫迭代器,迭代器的名稱是CMyistream_iterator。我想設置*運算符的函數,因爲它在迭代器中使用。模板和運算符重載和迭代器

template<class T> 
    class CMyistream_iterator{ 
     public: 
     T my; 
     T* cm; 
     CMyistream_iterator(istream& x):my(x){}; 
     T operator * (CMyistream_iterator<T>& p); 
    }; 
    template<class T> 
    T CMyistream_iterator<T>::operator * (CMyistream_iterator<T>& p){return p.my;} 
    int main() 
    { 
     CMyistream_iterator<int> inputInt(cin); 
     int n1,n2,n3; 
     n1 = * inputInt; 
    } 

但代碼出錯了,並說「不匹配'operator *'(操作數類型是CMyistream)」。任何人都可以幫我嗎?

回答

0

您的問題與模板無關,但涉及操作符重載的基礎知識。你需要寫簡單

T operator *(); 

T CMyistream_iterator<T>::operator *(){ 
    return my; // meaning this->my 
} 

的原因是因爲你的運營商早已類的成員,他們已經有了 一個隱含參數 - 類對象本身,這就是參數你需要使用。

您編寫的代碼聲明不是間接運算符(*x),而是乘法運算符(x*y)。

代碼中的另一個問題是,您試圖將istream轉換爲int中的CMyistream_iterator(istream& x):my(x){};,但這與您提到的編譯錯誤無關;這個問題的解決方案取決於你需要做什麼。