3

私は次のようなクラスを持っています:

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

そして、ポストインクリメント演算子を次のように定義すると:

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

でエラーが発生Expression is not assignablethis = this->next;ます。

これどうしたの?thisを指すようにするにはどうすればよいnextですか?

4

7 に答える 7

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();  }
};
于 2013-03-11T07:31:08.233 に答える
1

C++ 標準によると、thisポインターはprvalue式 ( [class.this]を参照) ですが、代入演算子には左オペランドとして左辺値が必要です ( [expr.ass]を参照)。

于 2016-05-05T13:29:25.057 に答える
1

これは変更できません。それは一定です。

于 2013-03-11T07:29:45.207 に答える
0

ここで何をしようとしているかについて、あなたは非常に混乱しているようです。nodeリスト内のノードを表すクラスがあります。通常、iterator現在のリスト内の位置を表すクラスもあります。リスト内の次の項目に反復するために使用しようとしているように思えますが++、それを行うには、独自のクラスとして反復子が必要です。

this一般に、ポインターに割り当てることは意味がありません-現在のオブジェクトコンテキストを参照します。ポインターthisを設定するだけでそのコンテキストを変更することはできません。this

これが少しでもお役に立てば幸いです。

于 2013-03-11T07:24:29.640 に答える
0

STL にiteratorsがある理由を発見しました。イテレーターは、ノードへのポインターをそれ自体のメンバーとして保持しているか、場合によってはポインターです。また、メンバー変数を変更することもできます。多分次のようなものを試してください:

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...
};
于 2013-03-11T07:30:04.420 に答える
0

それをしてはいけない。いくつかの汚いトリックによって変更されたとしてもthis、変更は呼び出し元に伝播されません。thisメソッドの隠し仮引数です。

于 2013-03-11T07:20:51.833 に答える
-1

隠しパラメーター 'this' は、'const' 修飾子と共に渡されます。したがって、変更することはできません。 これを隠した

于 2013-03-11T07:26:04.180 に答える