2014-10-27 67 views
2

如何在下列函数中不返回任何值?警告:控制可能会达到非无效功能的结束[-Wreturn-type]

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

? – 2014-10-27 22:12:28

+1

您可以删除else部分,只在循环外部返回false。 – Scooter 2014-10-27 22:18:54

+0

这是一个非常糟糕的运算符重载。 – 2014-10-27 22:25:42

回答

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

谢谢,一切正常完美 – 2014-10-27 22:55:00

2

你不小心把“未找到”情况下,else分支您的循环体内。这意味着如果第一个项目不是您正在寻找的项目,您已经退出循环。

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

通过删除else分支来解决问题。循环后只有,return false自此知道该元素尚未找到。当z.count小于1时,

+0

+1,很好! – 2014-10-27 22:28:18

相关问题