Вектор, содержащий шаблоны, выдает ошибку при отжимании - PullRequest
0 голосов
/ 10 мая 2018

Введение: У меня есть 3 объекта:

class cars;
template<class T> class types : public cars;
template<class T> exposition{
vector<T*> car_vector;
...};

Это школьный проект, и я должен много использовать и понижать, и понижать. Мне удалось добавить 5 типов автомобилей в вектор так:

void add(T* toadd) {
    int opt;
    cout << "\n\t 1) Add cabrio";
    cout << "\n\t\t Your option: "; cin >> opt;
    switch (opt) {
        case 1: {
            toadd = new types<cabrio>(name, price);
            types<cabrio> *a = dynamic_cast<types<cabrio>*>(toadd);
            car_vector.push_back(a);
            incr();
            break;
        }

Я вырезал часть бесполезного кода для демонстрации. Это работает, если я использую следующий код для печати вектора, типы в порядке (typeids - шаблоны и все):

void toString() {
    for (auto i : v_masini)
    {
        cout << "\n\t "<< i->get_type(); // returns typeid(*i).name()
            cout << "\t "; i->toString();
        cout << endl;
    }
}

Теперь я должен был сделать еще один класс для продаж и покупок. Он должен содержать вектор автомобилей 'суперспорта'. Следующая реализация выдает ошибку о том, что она не может конвертировать из автомобилей в типы const &, хотя, если я печатаю typeid (* i), он говорит, что это тип ...

vector<types<supersport>> get_ss() {
    vector<types<supersport>> to_return;
    for (auto i : car_vector)
        if (i->get_type() == "class supersport")
        {
            to_return.push_back(*i);
        };
    return to_return;
}

Заранее спасибо за помощь!

...