0

我必须在 C++ 中编写一个类的方法,当它们只给我名称时,它会向我显示一个类的所有属性。例如,我有一个包含 a_name、a_goals 和 a_points 的类“团队”。所以当他们给我一个带有名称的字符串时,我必须将它与我的动态结构进行比较,并找到具有相同名称的团队来显示它。我有这个代码:

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 行中停止。任何想法我做错了什么?

编辑:想把它翻译成英文,但我忘记了一些东西,这次只是复制/粘贴它。

4

1 回答 1

1

有可能在线路中崩溃:

if (trobat == true) eq=i->a_equip;

因为您在i == NULLin the时检查“i!=NULL” 。loop. One of the terminating conditions of theloop 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并进入函数以跟踪它。

于 2013-04-15T17:36:55.143 回答