我有一個Player類,其中Class類型的每個對象都有一個名稱,獲勝,損失和繪製。 Player類的每個對象都是通過調用the_player = new Player(the_name)創建的。當用戶輸入一個新的名字來爲程序添加一個Player對象時,一個指針被壓入一個向量AllPlayers中。在推動新指針之前,程序應檢查所需播放器不存在於所述矢量中。我必須在整個程序中檢查幾次,所以我想我會爲它寫一個函數。這裏是我的功能:搜索對象指針的向量
int findPlayer(vector<Player*> &vals, string name_in)
{
for (int i = 0; i < vals.size(); i++){
if (vals[i]->getName() == name_in){
cout << vals[i]->toString() << endl;
return i;
}
else
return -1;
}
};
當選項被要求增加一個新的播放器下面的代碼被用於:
do {
cout << "Name: ";
cin >> the_name;
if (findPlayer(AllPlayers, the_name) != -1){
cerr << "Player already exists\n";
}
} while (findPlayer(AllPlayers, the_name) != -1);
the_player = new Player(the_name);
AllPlayers.push_back(the_player);
出於某種原因,不過,每次我嘗試添加一個新的播放器它會拋出「玩家已經存在」並且永遠不會離開do-while循環。當AllPlayers矢量爲空時,情況更是如此。我爲調試添加了一個cout < < < findPlayer(AllPlayers,the_name),並且它打印了4192252,我認爲它是向量中可能的最大元素。
所以問題是:爲什麼它返回4192252而不是-1?
您是否啓用了編譯器警告?我會警告導致此問題的錯誤。 – user2079303 2014-11-21 08:30:29
您是否使用調試程序遍歷代碼? – 2014-11-21 08:33:37