2017-01-27 5 views
2

Qtをコンパイルすると、コンパイラの警告が表示され、困惑します。g ++から '初期化されていません'という警告が表示されるのはなぜですか?

コード

struct QAE{ 
    QString qsSetname; 
    QString qsAnswer; 
    QString qsQuestion; 
    int index; 
}; 

typedef QHash<int, QAE *> * ptrQAEset; 
typedef QHash<int, QAE *> QAEset; 

QHash<QString, ptrQAEset> QAESets; 

void func() { 
    ptrQAEset qaeset = QAESets.value(oldSetName, qaeset); 
    QAESets.remove(oldSetName); //remove association with old set name 
    QAESets.insert(newSetName, qaeset); //create association with new set name 
} 

と警告

C:\Qt\5.4\mingw491_32\include\QtCore\qhash.h:205: warning: 'qaeset' may be used uninitialized in this function [-Wmaybe-uninitialized] 
    : next(n), h(hash), key(key0), value(value0) {} 

私ははっきりとそれを初期化しています。私は警告を理解していません。

おかげ

答えて

6

問題は、私が思うに、第二パラメータである:

ptrQAEset qaeset = QAESets.value(oldSetName, qaeset);

oldSetNameが見つからない場合は、デフォルト値として「qaeset」を渡しています、それは初期化されていません。

+0

それです。私はconst QHash :: value(const Key&key)constを使うことを意図していたので、それは全く見られませんでした。ありがとう – driftwood

3

ptrQAEset qaeset = QAESets.value(oldSetName、qaeset)。

同じ変数を初期化するために使用される式の変数の値を読み込んでいます。したがって、コンパイラはまだ初期化されていない間に使用されていることを正しく心配しています。

関連する問題