2016-03-27 14 views
-1

イテレータが正しく機能するようにしようとしています。不等式i != a.end()については、テンプレートクラス内での不等式チェック

は、私は友人の機能のためのエラー

no know conversion from argument 2 from 'const a3::vector<int>::iterator' to 'const a3::vector<int>& 

を取得します。イテレータがではなく、に等しいでないかどうかをチェックする関数が必要で、どうすればよいかわかりません。

クラス

#include <iostream> 
using std::cout; 
using std::endl; 

namespace a3 
{ 
template <typename T> 
class vector 
{ 
    public: 


    class iterator { 
    public: 
    int index_; 
    vector* a_; 

    iterator() : index_(-1), a_(0) {} 
    iterator(int index, vector* a) : index_(index), a_(a) {} 

    iterator& operator=(const iterator& itr) 
    { 
     a_ = itr.a_; 
     index_ = itr.index_; 
     return *this; 
    } 

    iterator& next() { 
     index_++; 
     return *this; 
    } 

    iterator& operator++() { 
     return next(); 
    } 




    int& operator*() { return (*a_)[index_]; } 
    }; 

    private: 
    T* mem_; 
    int sz_; 

    public: 
    vector(int sz) : sz_(sz), b_(0, this), e_(sz, this) 
    { 
    mem_ = new T[sz]; 
    } 
    ~vector() { delete[] mem_; } 

    const T& operator[](T i) const { return mem_[i]; } 
    T& operator[](T i) { return mem_[i]; } 

    const int& get_size() const { return sz_; } 

    const iterator& begin() { return b_; } 
    const iterator& end() { return e_; } 

    friend bool operator!=(const iterator& itr1, const vector<T>& vec1) 
    { 
    return !(itr1.index_ == vec1.end); 
    } 


    private: 
    iterator b_; 
    iterator e_; 
}; 
} 

主な機能

#include "a3_vector.cpp" 


int main(int argc, char** argv) 
{ 
    using namespace a3; 
    vector<int> a(10); // allocate an int array of size 10 
    for (int i=0; i<10; ++i) a[i] = i*2; 

    // a now looks as follows 
    //0,2,4,6,8,10,12,14,16,18 

    // prints the content of the array 
    vector<int>::iterator i; 
    for (i = a.begin(); i != a.end(); i.next()) { 
     cout << *i << endl; 
    } 
} 
+0

'i!= a.end()'という式についてもう少し考えてみましょう。イテレータとベクトルを比較せず、イテレータと他のイテレータを比較します。そして、あなたの 'operator!='関数も意味をなさない。それはメンバ関数へのポインタと整数を比較する。 –

答えて

1

これは根本的に間違っている:

friend bool operator!=(const iterator& itr1, const vector<T>& vec1) 

イテレータの比較は、イテレータを比較する必要があります。何がしたいことは、このようになり、比較演算子です:すべての後に

friend bool operator!=(const iterator& itr1, const iterator& itr2); 
friend bool operator==(const iterator& itr1, const iterator& itr2); 

、それはこの式がやろうとしているものです。

i != a.end() 

次の2つのイテレータを比較しようとしています。エラーは、!=で見つかった一致のため、a.end()const vector<T>&に変換しようとしています。 !=を修正して、第2引数としてイテレータを取るだけで問題ありません。

関連する問題