2013-04-08 4 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)' to? –

+0

Если я объявлю итератор вроде этого "QListIterator i (* this);" внутри функции-члена, которую она компилирует. Если я удалю (* this) из объявления в заголовочном файле, он не компилируется. QListIterator нуждается в списке, отправленном конструктору: http://qt-project.org/doc/qt-4.8/qlistiterator.html – georgelappies

ответ

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

Адриан, спасибо за отличный ответ. Я ценю вашу помощь. Поэтому я полагаю, что лучше использовать «иметь», тогда «есть», когда дело доходит до QList;) – georgelappies

+0

Herb Sutter в своих книгах предполагает, что наследование сильно злоупотребляют. Когда вы можете сделать «есть», сделайте это. – Adrian

Смежные вопросы