Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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++;如何从迭代器(内部类)访问集合成员变量?这有意义吗?_C++_Data Structures - Fatal编程技术网

C++ C++;如何从迭代器(内部类)访问集合成员变量?这有意义吗?

C++ C++;如何从迭代器(内部类)访问集合成员变量?这有意义吗?,c++,data-structures,C++,Data Structures,我试图编写类似于std::vector的类,它将包含一个迭代器作为内部类。对于迭代器的一些成员函数,我想从向量类访问变量。例如,当重载运算符++时,我想检查迭代器的索引是否超过向量的大小(如果是,则抛出std::out of_range()。我已经基于实现了对外部类变量的访问。但出于某种原因,编译器向我抛出以下错误: 错误C2440:'':无法从“初始值设定项列表”转换为“向量::迭代器” 以下是复制此问题的代码的最低版本: template <typename Type> clas

我试图编写类似于std::vector的类,它将包含一个迭代器作为内部类。对于迭代器的一些成员函数,我想从向量类访问变量。例如,当重载运算符++时,我想检查迭代器的索引是否超过向量的大小(如果是,则抛出std::out of_range()。我已经基于实现了对外部类变量的访问。但出于某种原因,编译器向我抛出以下错误:

错误C2440:'':无法从“初始值设定项列表”转换为“向量::迭代器”

以下是复制此问题的代码的最低版本:

template <typename Type>
class Vector
{
public:
    class Iterator;
    Vector() : size(0), capacity(0), data(nullptr) {}
    Iterator begin()
    {
        return Iterator(this, 0);
    }
private:
    size_t size, capacity;
    Type* data;
};

template <typename Type>
class Vector<Type>::Iterator
{
public:
    Iterator(Vector& vectorRef, size_t index) : vectorRef(vectorRef), index(index) {}
private:
    size_t index;
    Vector& vectorRef;
};

int main()
{
    Vector<int> vec;
    vec.begin();
    return 0;
}
模板
类向量
{
公众:
类迭代器;
Vector():大小(0)、容量(0)、数据(nullptr){
迭代器begin()
{
返回迭代器(this,0);
}
私人:
大小、容量;
类型*数据;
};
模板
类向量::迭代器
{
公众:
迭代器(Vector&vectorRef,size_t index):vectorRef(vectorRef),index(index){}
私人:
尺寸指数;
向量&vectorRef;
};
int main()
{
向量向量机;
vec.begin();
返回0;
}

这是什么原因?像这样传递对向量类的引用有意义吗?或者有更好的方法吗?

这是因为
这个
有类型
向量*
或者
常量向量*
,但是你的构造函数接受的是
向量&
,所以找不到匹配的构造函数


尝试使用
Vector(*this,0)

谢谢。有时我仍然混淆了指针和引用的用法。取消引用“this”并没有解决这个问题,但我将vectoref的类型更改为Vector*,至少它正在编译。现在来测试一下,好的。再次测试它,它也可以像您建议的那样取消引用“this”。再次感谢你。