0

Qlist を継承する新しいクラスを作成しました。この新しいクラスには、順方向と逆方向にリストを反復処理する必要がある 2 つのメンバー関数があります。

現在、私はc ++とQtに比較的慣れていないため、宣言構文にエラーが潜んでいますが、コンパイルされると宣言された保護されたメンバー変数としてイテレーターを取得できません。

クラスヘッダーには、

[...]
public:
    MyObject* moveNext(); // this returns a pointer to next object
    MyObject* movePrev(); // this return a pointer to prev object

protected:
    QListIterator<MyObject *> i(*this); // this is where the problem is!!!
[...]

メンバー関数内で反復子を宣言すると、以前の位置が失われるため、目的が無効になります...

私はこれを間違った方法で行っていますか (QList から継承し、グローバルでリストに永続的な反復子を持たせたいと考えています)?

4

1 に答える 1

1

iイテレータを前後に移動させたい場合は、明らかに可能です。と演算子QListIteratorの両方をサポートします。++--

これを行う方法は、(QList から派生する代わりに) QList をクラスのプライベート メンバーとして持つことです。別のプライベート メンバーとして、投稿したスニペットのようなイテレータがあります。

class Foo {
    QList<MyObject*> list;
    QListIterator<MyObject*> it;
    public:
    MyObject* moveNext() { return *(++it); }
    MyObject* movePrev() { return *(--it); }
    Foo() : list(QList<MyObject*>()) {
        it = list.begin();
    }
};

ただし、クラス宣言内の変数の初期化はできません。クラスコンストラクターでそれを行う必要があります。

于 2013-04-08T13:48:59.673 に答える