У меня есть класс 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);
По некоторым причинам, хотя, каждый раз, когда я пытаюсь добавить новый игрок он бросает «Player уже существует» и никогда не покидает цикл do-while. Это даже верно, когда вектор AllPlayers пуст. Я добавил cout < < findPlayer (AllPlayers, the_name) для отладки и напечатал 4192252, который, как я полагаю, является наибольшим элементом, возможным в векторе.
Итак, вопрос в том, почему он возвращает 4192252, а не -1?
Вы включили предупреждения компилятора? Моя предупреждает об ошибке, которая вызывает это. – user2079303
Прошли ли вы через свой код с помощью отладчика? –