0

我创建了一个继承自 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 继承,然后希望拥有一个全局且对列表持久的迭代器)?

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 回答