警告C4715:'运营商==' :并非所有控制路径都返回值

时间:2016-03-03 03:17:44

标签: c++

我一直收到这个错误,我不明白为什么。编译器告诉我它在本节中。

非常感谢任何帮助

bool operator==(const Bitmap& b1, const Bitmap& b2){
    // TODO: complete the == operator
    if ((b1.height == b2.height) && (b1.width == b2.width))
    {

        for (int r = 0; r < b1.height; r++)
        {

            for (int c = 0; c < b1.width; c++)
            {
                if (b1.get(r, c) == b2.get(r, c))
                {

                }
                else
                    return false;
            }

        }

    }
    else
        return false;
}

5 个答案:

答案 0 :(得分:0)

编译器的诊断正如它所说的那样。

注意,如果for循环一直运行到结尾,而没有取回返回false的if条件,如果r达到b1.height值,则执行路径将到达结尾这个函数没有明确的return

答案 1 :(得分:0)

错误信息非常清楚。

bool operator==(const Bitmap& b1, const Bitmap& b2){

    if ((b1.height == b2.height) && (b1.width == b2.width))
    {
        for (int r = 0; r < b1.height; r++)
        {
            for (int c = 0; c < b1.width; c++)
            {
                ...
            }
        }
        return ???;   // What should be returned here?
    }
    else
        return false;
}

答案 2 :(得分:0)

错误消息说明错误。

bool operator==(const Bitmap& b1, const Bitmap& b2){
    // TODO: complete the == operator
    if ((b1.height == b2.height) && (b1.width == b2.width))
    {

        for (int r = 0; r < b1.height; r++)
        {

            for (int c = 0; c < b1.width; c++)
            {
                if (b1.get(r, c) == b2.get(r, c))
                {

                }
                else
                    return false;
            }

        }
        return true; // I guess you forgot this line

    }
    else
        return false;
}

答案 3 :(得分:0)

嗯,这正是错误所说的。编译器不知道是否有可能触发嵌套for循环中的代码。假设第一个条件为真,则代码可能永远不会到达return语句。因此,无论您提供什么条件,编译器都会确保始终返回一些内容。

bool operator==(const Bitmap& b1, const Bitmap& b2){
if ((b1.height == b2.height) && (b1.width == b2.width))
{
    // The compiler expects a return statement that is always reachable inside this if.

    for (int r = 0; r < b1.height; r++)
    {

        for (int c = 0; c < b1.width; c++)
        {
            if (b1.get(r, c) == b2.get(r, c))
            {

            }
            else
                return false; //This isn't always reachable.
        }

    }
}
else
    return false; // This case is covered, so nothing wrong here.
}

答案 4 :(得分:0)

很简单。

bool operator==(const Bitmap& b1, const Bitmap& b2){
// TODO: complete the == operator
if ((b1.height == b2.height) && (b1.width == b2.width))
{

for (int r = 0; r < b1.height; r++)
{

    for (int c = 0; c < b1.width; c++)
    {
        if (b1.get(r, c) == b2.get(r, c))
        {

        }
        else
            return false;
    }

}
// if your function runs to end of for loop, you get to here
}
else
    return false;
//then here
return false;   //<-- add this
}