これは今のところ入手したコードですが、不完全な変数型のcontainer :: iteratorエラーのためにコンパイルされません。私のコードを整理する方法を理解しようとしているので、クラスとイテレータはまだかなり単純です。なぜ不完全な型のエラーがあり、それを解決するのですか?
template <typename T> class container {
using size_type = std::size_t;
using pointer = T*;
using const_pointer = const T*;
public:
class iterator;
container (size_type n=0): data {n>0 ? new T[n]:nullptr}, size {n>0 ? n:0}{};
container (iterator begin, iterator end){};
~container(){ delete[] data; };
private:
pointer data;
size_type size;
};
template <typename T> class container<T>::iterator {
public:
iterator (pointer p): current {p} {};
iterator& operator++(){ current++; return *this; };
iterator& operator--(){ current--; return *this; };
reference operator*(){ return *current; };
bool operator== (const iterator& b) const { return current == b.current; };
bool operator!= (const iterator& b) const { return current != b.current; };
private:
pointer current;
};
可能であれば、コンテナクラスの反復子定義を保持したいと思います。すべての返信いただきありがとうございます。
ありがとう、私はこれが問題の原因となっていることを知っています。私はそこに「通常の」回避策があるのか疑問に思った。それは、インライン定義以外のものではないようです。 –