我创建了一个继承自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)?
答案 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();
}
};
但是,无法在类声明中初始化变量。你必须在类构造函数中这样做。