Инициализация qlist с помощью клавиш qhash-> - PullRequest
0 голосов
/ 04 августа 2011

Может ли произойти плохая инициализация при выполнении следующих действий:

pdList = new QList<QString>(somehash->keys());

, где

pdList = QList<QString>*
somehash = QHash<QString,QList<someobject*> > *

эта операция происходит при запуске в конструкторе.

Причина, по которой я спрашиваю, иногда вызывает сбой при выполнении

pdlist->contains(someqstring)

Rigth после вызова конструктора. Авария в

/ USR / местные / Trolltech / Qt-4.6.3-410wrl / включать / QtCore / qlist.h: 93

/ USR / местные / Trolltech / Qt-4.6.3-410wrl / включить / QtCore / qlist.h: 757

Ответы [ 3 ]

0 голосов
/ 04 августа 2011

Обратите внимание на использование шаблона, как показано ниже.Вы должны использовать <> символы:

QHash<QString,QList<someObject*> > somehash;
//Populate your hash here

//Populate list with keys
QList<QString> pdList (somehash.keys());
0 голосов
/ 04 августа 2011

Предварительное предположение, пока не будет предоставлен дополнительный код.

Возможно, вы зависите от неправильного порядка инициализации.Некоторые варианты следующего:

class MyClass {
public:
  MyClass() :
    somehash(new QHash<QString, QList<MyClass*> >()),
    pdList(new QList<QString>(somehash->keys())) {}
private:
  QList<QString> *pdList;
  QHash<QString, QList<MyClass*> > *somehash;
};

pdList всегда будут инициализироваться до somehash.Это порядок, в котором они перечислены как члены данных, а не в конструкторе, который определяет его.Некоторые компиляторы позволяют вам размещать их в неправильном порядке в списке инициализации конструктора;другие не будут.

Это всего лишь предположение;если вы предоставите больше информации, сообщество сможет лучше вам помочь.

0 голосов
/ 04 августа 2011

Вы должны использовать QList< QString >, в отличие от QList(QString).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...