Ожидаемое значение l: вызов пользовательского итератора из класса хоста

Я сделал эту тестовую программу, чтобы повторить ошибку из моего фактического кода. Итератор работает правильно при вызове в основной функции, когда stuff() закомментировано. stuff() заставляет компилятор выдавать ошибку. Я предполагаю, что причина в том, что хост-класс не является объектом во время компиляции... так что не l-значение? К сожалению, я не совсем знал, для чего искать, чтобы найти объяснение того, как сделать что-то подобное этой работе.

#include <iostream>

class Foo
{

    class Iterator;

public:

    Foo() { init(); }

    Iterator begin()
    {
    return Iterator(data);
    }

    Iterator end()
    {
    return Iterator(data+10);
    }

    void stuff()
    {
        for (auto i = begin(); i != end(); ++i)
        {
            1 + 1;
        }
    }

private:

    class Iterator
    {

    public:

    Iterator(int* i)
    {
        current = i;
    }

    bool operator!=(Iterator& rhs)
    {
        return rhs.current != current;
    }

    Iterator& operator++()
    {
        current = ++current;
        return *this;
    }

    int* operator*()
    {
        return current;
    }

    private:

    int* current;
    };

    void init()
    {
    for (int i = 0; i < 10; ++i)
    {
        data[i] = i;
    }
    }

    int data[10];

};


int main()
{

    Foo foo;

    for (auto i : foo)
    {
    std::cout << *i << std::endl;
    }
}

Ошибка:

itertest.cpp:31:31: error: invalid operands to binary expression ('Foo::Iterator' and 'Foo::Iterator')
        for (auto i = begin(); i != end(); ++i)
                               ~ ^  ~~~~~
itertest.cpp:49:7: note: candidate function not viable: expects an l-value for 1st argument
        bool operator!=(Iterator& rhs)

0 ответов

Другие вопросы по тегам