Я пытаюсь написать класс, похожий на std :: vector, который бы содержал Iterator в качестве внутреннего класса.Для некоторых функций-членов Iterator я хотел бы получить доступ к переменным из моего класса Vector.Например, при перегрузке оператора ++ я хотел бы проверить, не превышает ли индекс Iterator размер вектора (и если да, то бросить std :: out_of_range ()).Я реализовал этот доступ к переменной внешнего класса на основе этой темы .Но по какой-то причине компилятор выдает мне следующую ошибку:
ошибка C2440: '': невозможно преобразовать 'список инициализаторов' в 'Vector :: Iterator'
Здесьминимальная версия моего кода, повторяющая проблему:
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 таким образом?Или есть лучший способ?