Как создать список экземпляров класса в С++ с помощью list У меня есть класс Bus и Park
Bus содержит информацию о водителе автобусе и номеру маршрута, а также методы которые возвращают всю эту информацию Park должен содержать информацию об автобусах находящихся в парке, для этого я хочу создать список который будет содержать экземпляры класса Bus, но натыкаюсь на самую неинформативную ошибку: Ошибка C2678 бинарный "==": не найден оператор, принимающий левый операнд типа "Bus" (или приемлемое преобразование отсутствует) хотя у меня нигде не используется "==".
класс Park выглядит вот так
class Park {
private:
list <Bus> buses;
public:
void add_bus(Bus bus) {
buses.push_back(bus);
}
void remove_bus(Bus bus) {
buses.remove(bus);
}
list<Bus> get_buses() {
return buses;
}
};
Вы используете метод list::remove, а ему необходимо проверить равен ли один Bus другому. Для этого необходимо определить ператор сравнения (bool Bus::operator== (const Bus & bus) const).
Функция удаления:
Комментарий от @Unick:
Просто код с find_if немного отличается от remove(remove_if), т.е. не удалит все повторяющиеся автобусы, а только первый.
Может быть важной информацией в зависимости от того, как организованно добавление Bus в общий список.
void remove_bus(Bus bus) {
std::list<Bus>::const_iterator it =
std::find_if(buses.cbegin(), buses.cend(), [&bus](const Bus& ownedBus) {
return (bus.name() == ownedBus.name());
});
if (it != buses.cend())
buses.erase(it);
}
На месте name() - метод из класса Bus, который позволяет идентифицировать (как-либо) этот Bus.
Версия с remove_if:
void remove_bus(Bus bus) {
buses.remove_if([&bus](const Bus& ownedBus) {
return (ownedBus.name() == bus.name());
});
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости