我必须在C ++中编写一个类的方法,当它们只给出我的名字时,它会向我显示一个类的所有属性。例如,我有一个带有a_name,a_goals和a_points的类'Team'。因此,当他们给我一个带有名称的字符串时,我必须将它与我的动态结构进行比较,并找到具有相同名称的团队来显示它。我有这段代码:
void Classificacio::mostrar(string nom) const {
Equip eq;
Node* i=a_inici;
bool trobat=false;
while(!trobat && i!=NULL) {
if(nom.compare(i->a_equip.NomEquip())==0) trobat=true;
else i=i->seg;
}
if(trobat==true) eq=i->a_equip;
cout << eq << endl;
}
NomEquip()是一个返回团队名称的方法。 但它不起作用。每次我尝试使用调试器执行它时,它都会在if行中停止。我有什么想法吗?
编辑:想把它翻译成英文,但我忘了一些东西,这次只是复制/粘贴。
答案 0 :(得分:1)
行中有可能崩溃:
if (trobat == true) eq=i->a_equip;
因为在in the
i == NULL`时检查'i!= NULL loop. One of the terminating conditions of the
而loop is that
。
假设while
循环因i == NULL
而终止,您的if
语句将取消引用未指定行为的NULL指针。
编辑1:
如果它在if (nom.compare(i->a_equip.NomEquip()) == 0)
崩溃,并且我们知道i
有效,则会导致NomEquip
函数是一个主要的结果。
将while
循环更改为:
while (...)
{
std::string nom_equip = i->a_equip.NomEquip();
if (nom == nom_equip)
//...
}
现在将断点放在std::string
行并进入函数以跟踪它。