在这段代码中,我有一个警告:控制达到非void函数的结束[- return-type].我怎样才能解决这个问题


int Linkedlist::count_value_type(Node* head_ptr, const Node::value_type& target)
{
    Node* current;
    int total = 0;
    for(current = head_ptr; current !=NULL; current = current->getLink())
    {
        if(target == current->getData())
        {
            ++total;
        }
    return 0;
    }
}

代码基于一堆指向字符的链接列表,而另一个类将数据存储在该类

为什么 for循环中有return 0 ?

编译器完全正确。如果current == NULLfor循环的开始,整个循环将被跳过,不执行return,导致未定义的行为。

无论如何,如果它可以编译,那么之后就会有严重的困难的错误。他们是-Wall, -Wextra-Werror !

您可能想在 for循环之后添加return 0

我不知道循环到底在做什么,但是你必须知道在循环内部有'return'语句不是一个好主意。最好的做法是跳出循环,并在循环之外执行` return'行,如下所示:

for(...) {
    if(target != current->getData())
        break;
    total++;
}
return total;

这将修复您的警告和其他问题。还请注意,我颠倒了if()条件来触发'break'位。

相关内容

  • 没有找到相关文章

最新更新