我如何在以下函数中不返回任何值?
bool operator<=(string a, const Zoo& z) {
// Pre: none
// Post: returns true if animal a is in Zoo z.
// the owner does not count as an animal.
for ( int i=0; i< z.count; i++ ) {
if (z.cage[i] == a){
return true;
}
else {
return false;
}
}
}
答案 0 :(得分:3)
您的函数返回bool
但是有一个潜在的代码路径(例如z.count
是0
),它可能会到达函数的末尾并且不返回任何内容。因此,编译器发出警告。
在功能结束时添加return false;
(或return true;
,但false
似乎与您当前的逻辑相符合。
正如其他人所指出的那样,你的else
部分也是错误的。我把它重写为:
bool operator<=(string a, const Zoo& z) {
// Pre: none
// Post: returns true if animal a is in Zoo z.
// the owner does not count as an animal.
for ( int i=0; i< z.count; i++ ) {
if (z.cage[i] == a){
return true;
}
}
return false;
}
答案 1 :(得分:2)
您不小心将“未找到”案例作为循环体中的else分支。这意味着如果第一个项目不是您正在寻找的项目,那么您已经退出循环。
这当然有两个问题:如果你要找的元素在另一个位置,你就找不到它。此外,如果z.cage
为空,则不进入循环并且不返回任何值,这就是编译器通过警告告诉您的内容。
通过删除else分支解决问题。在循环之后只有,return false
从那以后你才知道找不到该元素。