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