[英]Why I got an incomplete type error and how to solve it?
這是目前獲得的代碼,但由於變量類型的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;
};
如果可能的話,我想將迭代器定義排除在容器類之外。 感謝您的任何答復。
如果可能的話,我想將迭代器定義排除在容器類之外。
並非如此,因為沒有定義container
就無法正確分析container
成員函數的參數。
內聯移動。
container (iterator begin, iterator end){};
它使用了iterator
但是在代碼中沒有iterator
的定義,只有一個聲明。 您需要定義迭代器的結構,然后才能聲明此構造函數。
您可以更改此構造函數以獲取引用。 然后,您可以在您的類中聲明它,然后在迭代器的定義下定義它。 IMO這不是最好的方法,但是有可能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.