我正在尝试编写类似于std::vector的类,其中将包含一个Iterator作为内部类。对于Iterator的某些成员函数,我想从我的Vector类访问变量。例如,当重载operator ++时,我想检查Iterator的索引是否不超过Vector的大小(如果是,则抛出std::out_of_range())。我已经基于this topic实现了对外部类变量的访问。但是由于某种原因,编译器向我抛出以下错误:



这是我复制问题的代码的最低版本:

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类的引用有意义吗?或者,还有更好的方法?

最佳答案

这是因为this的类型为Vector*const Vector*,但是您的构造函数接受Vector&,因此找不到匹配的构造函数。

尝试使用Vector(*this, 0)

关于c++ - C++如何从Iterator(内部类)访问Collection成员变量-这样做有意义吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53692160/

10-11 23:22
查看更多