2013-04-15 62 views
0

我必須在C++中編寫一個類的方法,它向我展示了一個類的所有屬性,當他們只給出我的名字時。例如,我有一個班級'團隊'與a_name,a_goals和a_points。所以當他們給我一個帶有名字的字符串時,我必須將其與我的動態結構進行比較,並找到具有相同名稱的團隊來顯示它。我有這樣的代碼:C++如何使用指針比較字符串與動態結構字符串?

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

你不在函數的任何地方使用參數'name',除非在那裏有一個錯字。在這種情況下,複製並粘貼您的代碼,請勿在內存中鍵入此代碼。否則,你會浪費每個人的時間調試實際不存在的代碼。 –

+0

是的抱歉修好了。程序崩潰 –

回答

1

沒有在該行崩潰的可能性:

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

因爲你檢查「我= NULL in theloop. One of the terminating conditions of theloop is that我== NULL`!

假設while循環因爲i == NULL而終止,您的if語句將取消引用一個未定義行爲的NULL指針。

編輯1: 如果崩潰在if (nom.compare(i->a_equip.NomEquip()) == 0),並且我們知道i是有效的,它導致了NomEquip功能是一家領先的culprint。

while循環更改爲:

while (...) 
{ 
    std::string nom_equip = i->a_equip.NomEquip(); 
    if (nom == nom_equip) 
//... 
} 

現在把斷點在std::string線,並進入功能來跟蹤它。

+0

它永遠不會去那條線,因爲它在這一個崩潰: if(nom.compare(i-> a_equip.NomEquip())== 0)trobat = true; –

+0

@ p.bosch:請參閱我的答案的編輯1。 –

+0

@ p.bosch:請編輯您的問題以顯示'a_equip'的類,尤其是'NomEquip'方法。 –