добавление экземпляров класса в list С++

194
06 мая 2018, 20:23

Как создать список экземпляров класса в С++ с помощью 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;
    }
};
Answer 1

Вы используете метод list::remove, а ему необходимо проверить равен ли один Bus другому. Для этого необходимо определить ператор сравнения (bool Bus::operator== (const Bus & bus) const).

Answer 2

Функция удаления:

Комментарий от @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());
    });
}
READ ALSO
boost::asio websocket С++

boost::asio websocket С++

У меня есть такой код, он подключается к websocket серверу и отправляет сообщения, но при каждой отправки он создаёт новое подключение на сервере...

196
Не коннектится слот Qt5

Не коннектится слот Qt5

Задача с вероятно очень глупой ошибкой перенесенная на тестовый проект:

190
Как работает данный код для шифрования слова шифром Цезаря?

Как работает данный код для шифрования слова шифром Цезаря?

Откопал код шифра Цезаря на C++ Собственно, вот он:

201