控制在bool函数中到达非void函数的结尾

时间:2014-07-07 23:15:28

标签: c++

这是我目前正在处理的一些代码,我似乎无法找到一种方法让这个函数停止抛出"控件到达非void函数的结尾& #34;错误。不应该在else语句中捕获if语句没有并且返回true或false的任何内容吗?

bool operator == (const MyInt& x, const MyInt& y)
{
    if (x.currentSize != y.currentSize)
    {
        return false;
    }
    else
    {
        for (int i = 0; i < x.currentSize; i++)
        {
                if (x.integer[i] != y.integer[i])
                {
                    return false;
                    break;
                }
                else
                    return true;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

如果x.currentsize == 0y.currentsize == 0,则您永远不会收到return声明。

我觉得你打算写下面的代码。请注意,我们只有在return true测试整个列表后才会bool operator==(const MyInt& x, const MyInt& y) { if (x.currentSize != y.currentSize) return false; for (int i = 0; i < x.currentSize; i++) if (x.integer[i] != y.integer[i]) return false; return true; }

{{1}}

答案 1 :(得分:2)

如果您的方法没有通过for循环,则必须在第一个else上加一个回报,例如,当x.currentSize = 0

此外,您的if条件总是在第一次迭代后返回一个值,因此您应该像这样更改它,这样您就可以检查Array

中的所有元素
bool operator == (const MyInt& x, const MyInt& y)
{
    if (x.currentSize != y.currentSize)
    {
        return false;
    }
    else
    {
        for (int i = 0; i < x.currentSize; i++)
                if (x.integer[i] != y.integer[i])
                    return false;
        return true;
    }
}

答案 2 :(得分:0)

这种错误的一般原因是难以阅读的错误代码。

按以下方式重写该功能

bool operator ==( const MyInt &x, const MyInt &y )
{
    if ( x.currentSize == y.currentSize )
    {
        int i = 0;
        while (  i < x.currentSize && x.integer[i] == y.integer[i] ) i++;

        return ( i == x.currentSize );
    }

    return ( false );
}

或者,如果integer是指针或数组,那么您可以应用标头std::equal中声明的标准算法<algorithm>。例如

#include <algorithm>

//...
bool operator ==( const MyInt &x, const MyInt &y )
{
    return ( x.currentSize == y.currentSize && 
             std::equal( x.integer, x.integer + x.currentSize, y.integer ) );
}

我认为这段代码看起来好多了不是吗?