为什么我会收到来自 g++ 'uninitialized'警告
Why am I getting 'uninitialized' warning from g++
编译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);
您正在读取用于初始化同一变量的表达式中的变量值。因此,编译器正确地关注它在未初始化的情况下被使用。
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 在未链接的部分上生成警告
- C++ - 在我尝试制作一个简单的计算器时有一个"uninitialized local variable y used"警告
- 为什么我会收到来自 g++ 'uninitialized'警告
- 叮叮当当 警告:"warning: unknown warning option '-Wno-maybe-uninitialized'"
- GCC - 删除"is used uninitialized in this function"警告