为什么我会收到来自 g++ 'uninitialized'警告

  • 本文关键字:g++ uninitialized 警告 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:Qt5.4mingw491_32includeQtCoreqhash.h:205: warning: 'qaeset' may be used uninitialized in this function [-Wmaybe-uninitialized]
     : next(n), h(hash), key(key0), value(value0) {}

我显然正在初始化它。我不明白警告。

谢谢

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

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

如果找不到默认值,您将传入"qaeset"oldSetName但这是未初始化的。

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

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

相关内容

最新更新