我正在尝试编写类似于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/