为什么我得到一个不完整的类型错误以及如何解决它

Why I got an incomplete type error and how to solve it?

本文关键字:错误 类型 何解决 解决 为什么 一个      更新时间:2023-10-16

这是现在得到的代码,但由于不完整的变量类型容器::迭代器错误而无法编译。类和迭代器仍然非常简单,因为我正在尝试弄清楚如何组织我的代码。

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 (iterator begin, iterator end){};

这使用iterator但是在代码中没有iterator的定义,只有一个声明。 您需要先定义迭代器的结构,然后才能声明此构造函数。

您可以更改此构造函数以获取引用。 然后,您可以在类中声明它,然后在迭代器的定义下定义它。 IMO 这不是最好的方法,但这是可能的。

如果可能的话,我想将迭代器定义排除在容器类之外。

事实并非如此,因为如果没有定义其类型,就无法正确分析container成员函数的参数。

以内联方式移动它。