C ++ Как получить доступ к переменной-члену Collection из Iterator (внутренний класс) - и имеет ли это смысл? - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь написать класс, похожий на 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 таким образом?Или есть лучший способ?

1 Ответ

0 голосов
/ 09 декабря 2018

Это потому, что this имеет тип Vector* или const Vector*, но ваш конструктор принимает Vector&, поэтому соответствующий конструктор не найден.

Попробуйте с Vector(*this, 0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...