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

标签 c++ qt iterator

我创建了一个继承自 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/

相关文章:

c++ - 多重映射迭代器是否也需要排序函数的类型?

c++ - 如何从 STL 数据结构中删除 reverse_iterator?

c++ - 在 vs 2010 c++ 中构建 log4cxx

c++ - Qt5.4 QOpenGLFramebufferObject toImage返回空白图像

c++ - RandomAccessIterator 是否暗示数据在内存中是连续的?

c++ - 编译时未实现的 QColor 错误 (C++)

c++ - 在 QTextEdit 中使用富文本

c++ - for 循环中的循环继续条件是否可以是最终返回 false/null 值的任何内容?

c++ - boost::function 与函数指针的奇怪行为

c++ - 为什么我不能在 uint8_t 类型中存储小整数?