簡體   English   中英

為什么我收到不完整的類型錯誤以及如何解決?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM