警告:控制可能达到非空函数的结束[-Wreturn-type]

时间:2014-10-27 22:10:22

标签: c++

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

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

2 个答案:

答案 0 :(得分:3)

您的函数返回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;
}

答案 1 :(得分:2)

您不小心将“未找到”案例作为循环体中的else分支。这意味着如果第一个项目不是您正在寻找的项目,那么您已经退出循环。

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

通过删除else分支解决问题。在循环之后只有return false从那以后你才知道找不到该元素。