【问题标题】:bool method inside a class ''Control may reach end o non-void function''类中的布尔方法''控件可能到达非无效函数的结尾''
【发布时间】:2016-06-21 15:34:41
【问题描述】:

所以,我有一个名为 Vuelo 的类,它有一个方法可以将乘客添加到飞机航班中,我必须检查乘客 id 是否已经在数组中(数组最初是全零),我还必须检查是否有足够的空间来添加其他乘客(最多 10 人)

bool Vuelo :: agregarPasajero(int id)
{
   int i = 0;

for(int iC = 0; iC < 10; iC++)
{
    if (listaPasajeros[iC] == id)
    {
        i++;
        return false;
    }
}

if(i == 0)
{
    if(cantidadPasajeros >= 10)
    {
        return false;
    }
    else
    {
        return true;
        cantidadPasajeros++;
    }
  }
 }

【问题讨论】:

  • 您的问题是什么?是“那个警告是什么意思?”?它的意思正是它的文字所说的。

标签: c++ namespaces


【解决方案1】:

如果 i 不为零,则无需任何类型的 return 语句即可到达函数的末尾。由于您声明该函数始终返回 bool,因此您应该为这种情况提供一个。

现在,您可能知道我在那个地方永远不会为零,但其逻辑相当复杂(我在第一次阅读时错过了它),并且不能指望编译器意识到实际上没有控制流到达函数末尾而不遇到返回的机会。在这种情况下,最好添加一个虚拟返回。

如果您删除虚假的i == 0 测试,您可能会侥幸逃脱没有虚拟回报。那时 i 必然总是为零,因为如果它曾经增加,函数会立即返回 false。

语句cantidadPasajeros++; 永远不会被执行,因为它位于return 语句之后。任何半途而废的编译器也会对此发出警告。

【讨论】:

  • 还有几个不靠谱的编译器。
  • @Barmar - 完全正确。变量 i 没有任何用途;如果删除所有对它的引用,该代码将可以正常工作。
  • 啊,没有看到您提出相同观点的第 3 段。
猜你喜欢
  • 2020-10-31
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多