繁体   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