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 == NULL
在for
循环的开始,整个循环将被跳过,不执行return
,导致未定义的行为。
-Wall
, -Wextra
和-Werror
!
您可能想在 for
循环之后添加return 0
我不知道循环到底在做什么,但是你必须知道在循环内部有'return'语句不是一个好主意。最好的做法是跳出循环,并在循环之外执行` return'行,如下所示:
for(...) {
if(target != current->getData())
break;
total++;
}
return total;
这将修复您的警告和其他问题。还请注意,我颠倒了if()条件来触发'break'位。