2013-04-08 77 views
0

我創建了一個從Qlist繼承的新類。這個新類有兩個成員函數,需要以正向和反向的方式遍歷列表。如何在兩個成員函數之間共享一個QListIterator?

現在我相對新的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!!! 
[...] 

decrlaring成員函數內的迭代器打敗目的,一個失去了它在以前的位置...

我要對這個錯誤的方式(通過從QList繼承,然後希望有一個全局和持久的列表)?

+1

你期待'(* this)'做什麼? – 2013-04-08 13:45:10

+0

如果我聲明這樣的迭代器「QListIterator i(* this);」在它編譯的成員函數內部。如果我從頭文件中的聲明中刪除(* this),它不會編譯。 QListIterator需要將列表發送給構造函數:http://qt-project.org/doc/qt-4.8/qlistiterator.html – georgelappies 2013-04-08 13:49:32

回答

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(); 
    } 
}; 

但是,類聲明中變量的初始化是不可能的。你必須在類構造函數中做到這一點。

+0

Adrian,感謝您的高度回覆,非常感謝您的協助。所以我認爲最好使用「有一個」,然後「是一個」,當涉及到QList;) – georgelappies 2013-04-08 14:41:08

+0

草本薩特在他的書中表明,繼承是高度過度使用。當你可以做「有」做到這一點。 – Adrian 2013-04-08 17:34:27

相關問題