如何在两个成员函数之间共享QListIterator?

时间:2013-04-08 13:43:36

标签: c++ qt iterator

我创建了一个继承自Qlist的新类。这个新类有两个成员函数,需要以前向和后向的方式迭代列表。

现在我对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,然后想要一个全局且持久的itterator)?

1 个答案:

答案 0 :(得分: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();
    }
};

但是,无法在类声明中初始化变量。你必须在类构造函数中这样做。