警告:控件可能达到非无效功能的末尾[-转弯类型]

warning: control may reach end of non-void function [-Wreturn-type]

本文关键字:转弯 类型 功能 控件 能达到 无效 警告      更新时间:2023-10-16

如何在以下函数中不返回任何值?

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;
        } 
    }
}

您的函数返回一个bool,但有一个潜在的代码路径(例如z.count0),它可能到达函数的末尾而不返回任何内容。因此,编译器发出了警告。

在函数末尾添加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;
}

您不小心将"not found"事例作为else分支放入循环体中。这意味着,如果第一个项目不是您要查找的项目,那么您已经退出了循环。

这当然有两个问题:如果你要查找的元素在另一个位置,你就找不到它。此外,如果z.cage为空,你就不会进入循环,也不会返回任何值,这就是编译器告诉你的警告。

通过删除else分支来解决问题。只有循环之后的return false,从那时起你就知道元素还没有找到。