作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个继承自 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/
我创建了一个继承自 Qlist 的新类。这个新类有两个成员函数需要以向前和向后的方式迭代列表。 现在我是 C++ 和 Qt 的新手,所以我的错误潜伏在声明语法中,但我无法将迭代器作为 protecte
我是一名优秀的程序员,十分优秀!