Код
vector<string> setNames (const vector<string> &new_players) {
players=new_players;
}
vector<int> setLevels (const vector<int> &new_players_level) {
players_level=new_players_level;
}
неверен, так как нет оператора возврата. Изменение объявления методов на void
делает код работающим так, как ожидается.
void setNames (const vector<string> &new_players) {
players=new_players;
}
void setLevels (const vector<int> &new_players_level) {
players_level=new_players_level;
}
По причинам, которые мне не совсем понятны, исключение оператора возврата в функции non-void на многих компиляторах не является фатальным ошибка компиляции (что, я думаю, должно быть) и вместо этого является просто предупреждением, но сгенерированный код имеет неопределенное поведение (с g ++, например, ваши ошибки кода).
Когда вы выполняете код, содержащий UB, все может произойти, включая, очевидно, работу, но со странным поведением.