我为什么没有初始化'来自g ++的警告

时间:2017-01-27 00:05:10

标签: c++ qt

编译Qt c ++程序会产生令我不解的编译器警告。

代码

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) {}

我清楚地初始化它。我不明白这个警告。

由于

2 个答案:

答案 0 :(得分:6)

我认为问题在于第二个参数:

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

如果找不到oldSetName,那么您将传入“qaeset”作为默认值,但这是未初始化的。

答案 1 :(得分:3)

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

您正在读取用于初始化同一变量的表达式中的变量值。因此,编译器正确地关注它在未初始化时的使用情况。