gpt4 book ai didi

c++ - qt编程中未初始化的switchcase错误

转载 作者:行者123 更新时间:2023-11-30 02:20:37 26 4
gpt4 key购买 nike

这是我检查笔记本电脑电池状态的代码。我没有做对,因为编译器给我一个关于 switch case 的错误:

UPower *u = new UPower(this);

Battery *b;
foreach (Battery *bat, *u->batteries()) {
b = u->batteries()->value(bat->path());
}
ui->batteryProg->setValue(b->percentage());

switch( b->state() ) {
case Battery::FullyCharged:
ui->batteryStatus->setText( tr( "Full" ) );
break;
case Battery::Discharging:
ui->batteryStatus->setText( tr( "Discharging" ) );
break;
case Battery::Charging:
ui->batteryStatus->setText( tr( "Charging" ) );
break;
default:
ui->batteryStatus->setText( tr( "No Battery" ) );
break;
}
ui->batteryframe->setVisible(true);

这是编译过程的错误输出:

 make: *** [Makefile:2028: corebox.o] Error 1
make: *** Waiting for unfinished jobs....
coreaction/coreaction.cpp: In member function 'void
coreaction::batteryCheck()':
coreaction/coreaction.cpp:114:25: warning: 'b' may be used
uninitialized in this function [-Wmaybe-uninitialized]
switch( b->state() ) {
~~~~~~~~^~
==> ERROR: A failure occurred in build().
Aborting...

我做错了什么??

最佳答案

这是重要的部分:

 coreaction/coreaction.cpp:114:25: warning: 'b' may be used 
uninitialized in this function [-Wmaybe-uninitialized]
switch( b->state() ) {
~~~~~~~~^~

它声明 b 可以在未初始化的情况下使用,如果循环为空则 b 永远不会被设置。

foreach (Battery *bat, *u->batteries()) {
b = u->batteries()->value(bat->path());
}

希望对您有所帮助。一个解决方案是在将 b 初始化为 nullptr 之后,在 switch 语句之前测试 b。

这是重要的部分,nullptr 和未初始化的指针是有区别的。

Battery* b = nullptr; // nullptr
Battery* b; // uninitialized

关于c++ - qt编程中未初始化的switchcase错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49529698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com