无法分配给此

时间:2013-03-11 07:18:24

标签: c++

我有一个类似的课程:

class Node {
    // data
    Node* next;
    void operator++(int);
};

当我像这样定义后增量运算符时:

void Node::operator++(int) {
    this = this->next;
}

我在Expression is not assignable上收到错误this = this->next;

这是什么?如何让this指向next

8 个答案:

答案 0 :(得分:2)

甚至不要尝试。它不起作用,如果你能使它工作,那么无论如何都会是一件坏事。

从外观上看,您的节点就像链接列表。如果是这种情况,那么你通常想要的是:

template <class T>
class linked_list { 

    class node { 
        node *next;
        T data;
    };

    node *head;
public:
    class iterator { 
        node *n;
    public:
        iterator(node *n=NULL) : n(n) {}

        iterator &operator++() { 
            n=n->next;
            return *this;
        }
        bool operator!=(iterator const &other) const { 
            return n != other.n;
        }
        // ...        
    };

    iterator begin() { return iterator(n); }
    iterator end()   { return iterator();  }
};

答案 1 :(得分:1)

这不能改变。它是不变的。

答案 2 :(得分:1)

根据C ++标准,this指针是 prvalue 表达式(请参阅[class.this]),但赋值运算符需要左值它的左操作数(见[expr.ass])。

答案 3 :(得分:0)

你做不到。即使通过一些肮脏的技巧改变this,更改也不会传播给调用者。 this是方法的隐藏形式论证。

答案 4 :(得分:0)

这是不可能的。在呼叫方那边做,如下所示:

current_node = current_node->next;

答案 5 :(得分:0)

你在这里尝试做什么似乎很困惑。您有一个node类,表示列表中的节点。通常情况下,还会有一个iterator类,表示您当前所在列表中的位置。在我看来,你试图使用++迭代到列表中的下一个项目,但要做到这一点,你需要将迭代器作为它自己的类。

通常,分配给this指针没有意义 - this引用当前对象上下文,您不能通过设置this指针来改变该上下文。

我希望这会对你有所帮助。

答案 6 :(得分:0)

您刚刚发现了为什么STL有迭代器。迭代器持有指向节点的指针作为其自身的成员,或者在某些情况下它是指针。它还可以修改它的成员变量。也许尝试类似的事情:

class Iterator {
    Node* node;
public:
    Iterator(Node* n)
        : node( n )
    {}

    Iterator& operator++()
    {
        node = node->next;
        return *this;
    }

    Iterator operator++(int)
    {
        Node* current = node;
        node = node->next;
        return Iterator(current);
    }

    Node& operator*()
    {
        return *node;
    }

    const Node& operator*() const; // etc...
};

答案 7 :(得分:-1)

隐藏参数'this'与'const'限定符一起传递。因此它无法改变。 Hidden this