gpt4 book ai didi

c++ - 如何在两个成员函数之间共享一个 QListIterator?

转载 作者:行者123 更新时间:2023-11-28 07:40:52 24 4
gpt4 key购买 nike

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

现在我是 C++ 和 Qt 的新手,所以我的错误潜伏在声明语法中,但我无法将迭代器作为 protected 成员变量声明为将编译。

我将在类标题中

[...]
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 继承,然后希望拥有一个全局的且持久存在于列表中的迭代器)?

最佳答案

如果你想让你的迭代器 i 向前和向后移动,这显然是可能的。 QListIterator 支持++-- 运算符。

你可以做到这一点的方法是将 QList 作为类的私有(private)成员(而不是从 QList 派生)。作为另一个私有(private)成员,您拥有您发布的代码段中的迭代器。

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

但是,类声明中的变量初始化是不可能的。您必须在类构造函数中执行此操作。

关于c++ - 如何在两个成员函数之间共享一个 QListIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15880717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com