包含模板的向量会在回退时引发错误

时间:2018-05-10 18:14:16

标签: c++ vector return

说明: 我有3个对象:

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

这是一个学校项目,我必须经常使用upcasts和downcasts。我设法将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;
        }

我已经为演示削减了一些无用的代码。它工作,如果我使用以下代码打印矢量,类型是好的(类型是模板和所有):

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

现在,我不得不再进行一次销售和购买课程。它必须包含'supersport'汽车的矢量。下面的实现抛出一个错误,说它不能从汽车转换为const类型&amp;,但是如果我打印(* i)的typeid它说它是一个类型......

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;
}

提前感谢您的帮助!

0 个答案:

没有答案