Как создать список экземпляров класса в С++ с помощью 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());
});
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть такой код, он подключается к websocket серверу и отправляет сообщения, но при каждой отправки он создаёт новое подключение на сервере...
Откопал код шифра Цезаря на C++ Собственно, вот он: