我为冗长的代码道歉,但我在C++程序中遇到了一个意想不到的问题。(teamNum
)包含向量的类类型在thereIsSimilarID
函数中,我的目标是检查teamNum
中是否存在满足以下条件的播放器:tName
等于_tname
(函数参数),pID
等于_pID
(函数参数)。
bool thereIsSimilarID(string _tname, int _pID)
{
for (int i = 0; i < teamNum.size(); i++)
{
if (teamNum[i].tName == _tname)
{
for (int j = 0; j < teamNum[i].player.size(); j++)
{
if (teamNum[i].player[j].pID == _pID)
return true;
}
}
else if (i == (teamNum.size() - 1))
{
return false;
}
}
}
字符串
在main
函数中:
int main()
{
cout << "\n" << thereIsSimilarID("Leverpool", 1) << endl;
}
型
意外输出为24,并且仅当球队(“Leverpool”)是teamNum
向量中的最后一支球队时才会发生此问题。
我很感激任何关于识别和解决此错误的指导。另外,如果可能的话,请帮助我了解根本原因,以便我可以从解决方案中学习。谢谢您的帮助!
1条答案
按热度按时间u3r8eeie1#
您遇到了未定义的行为。
如果你在最后一个元素上取
if (teamNum[i].tName == _tname)
-分支,但没有找到具有正确pID的玩家,你不会返回任何东西。这意味着,返回值是当前存储返回值的内存位置中的任何随机值。在你的例子中,它发生在24。但理论上,一切都可能发生。当
teamNum
为空时也会出现同样的问题。解决方案是确保总是从函数中返回一个值(当然,除非它具有返回类型
void
):字符串
你应该查看一下你的编译器设置,并启用所有的警告。通常,让它把某些警告当作错误处理是很好的。