Перегрузка операнда ++

Необходимо перегрузить операцию ++ как движение по списку. В чём ошибка?

template <class M>

    Node<M>* operator ++ (Node<M> &p)
    {
        p = p->next;
        return p;
    }
    
    int main()
    {
    
        Node<int>* pbeg = first(15);
        Node<int>* pend = pbeg;
        add(&pend, 2);
        add(&pend, 3);
        Node<int>* pv = pbeg;
        cout << pv->data << '\t';
        ++pv;
        cout << pv->data << '\t';

Ответы (1 шт):

Автор решения: Rikitikitavi

Перегрузить таким образом этот оператор как вы хотите не получится, т.к придется писать

Node* operator++()
{
    this = next; 
    return next;
}

а это не верно. this это prvalue (9.3.2)стандарта и ему нельзя ничего присваивать. Подробнее про prvalue можно прочитать здесь.

А если нужно сделать объект который бы указывал на ваш Node<M> и для которого был бы переопределен оператор ++, то нужно сделать отдельный класс для этого, как это сделано в стандартной библиотеке С++, там есть std::iterator

→ Ссылка