2011-08-04 50 views
0

悪い初期化が発生する可能性があります。qhash-とQListに初期化>キーが

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

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

この操作は、コンストラクタで、起動時に起こります。

尋ねる理由は、コンストラクタが呼び出された後

pdlist->contains(someqstring) 

rigthをしている間、私はクラッシュを取得し、時にはあります。 クラッシュが

/usr/local/Trolltech/Qt-4.6.3-410wrl/include/QtCore/qlist.h:93

/usr/local/Trolltech/Qt-4.6.3-です410wrl/include/QtCore/qlist.h:757

+0

コンストラクタの完全なコードを投稿してください。私はそれが初期化の順序かもしれないと思う。 –

答えて

0

QList(QString)ではなく、QList<QString>を使用する必要があります。

+0

彼は本当にQStringListを使うべきです... http://doc.qt.nokia.com/latest/qstringlist.html –

+0

あなたが言ったことを使っていますが、QList(QString)を書く理由はここのエディタですQStringの周りに Ajay

+0

コードブロックの前に4つのスペースを入れてください。私はあなたのためにそれを固定した。 –

0

以下のようなテンプレートの使用に注意してください。追加のコードが提供されるまでの予備的推測

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

//Populate list with keys 
QList<QString> pdList (somehash.keys()); 
0

:あなたは<>の文字を使用する必要があります。

おそらく、無効な初期化の順序に依存している可能性があります。次のいくつかの変種:

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前に初期化されます。データメンバとしてリストされた順序です。コンストラクタではなく、それを決定します。いくつかのコンパイラでは、コンストラクタの初期化リストに誤った順序で配置することができます。他はしません。

これは単なる推測です。より多くの情報を提供すれば、コミュニティがより効果的に役立つでしょう。

関連する問題