Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我得到一个不完整的类型错误,以及如何解决它?_C++_Incomplete Type - Fatal编程技术网

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

C++ 为什么我得到一个不完整的类型错误,以及如何解决它?,c++,incomplete-type,C++,Incomplete Type,这是一段代码,但由于变量类型container::iterator错误不完整,无法编译。该类和迭代器仍然非常简单,因为我正试图找出如何组织代码 template <typename T> class container { using size_type = std::size_t; using pointer = T*; using const_pointer = const T*; public: class itera

这是一段代码,但由于变量类型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;
};
模板类容器{
使用size\u type=std::size\u t;
使用指针=T*;
使用常量指针=常量T*;
公众:
类迭代器;
容器(size_type n=0):数据{n>0?新T[n]:nullptr},大小{n>0?n:0}{};
容器(迭代器开始,迭代器结束){};
~container(){delete[]data;};
私人:
指针数据;
大小\类型大小;
};
模板类容器::迭代器{
公众:
迭代器(指针p):当前{p}{};
迭代器和运算符++(){current++;return*this;};
迭代器和运算符--(){current--;返回*this;};
引用运算符*(){return*current;};
布尔运算符==(常量迭代器&b)常量{返回当前==b.current;};
布尔运算符!=(常量迭代器&b)常量{返回当前值!=b.current;};
私人:
指针电流;
};
如果可能的话,我希望将迭代器定义排除在容器类之外。谢谢你的回复

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

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

将其内联移动

container (iterator begin, iterator end){};
如果可能的话,我希望将迭代器定义排除在容器类之外

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

将其内联移动

container (iterator begin, iterator end){};
它使用
迭代器
,但在代码中没有
迭代器的定义,只有一个声明。在声明此构造函数之前,您需要定义迭代器的结构

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

它使用
迭代器
,但在代码中没有
迭代器的定义,只有一个声明。在声明此构造函数之前,您需要定义迭代器的结构


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

谢谢,我知道这是导致问题的原因。我想知道是否有一个“常规”的解决办法。似乎除了一个内联定义之外,它不是别的。谢谢,我知道这是导致问题的那一行。我想知道是否有一个“常规”的解决办法。似乎它只是一个内联定义。