我在C ++中的模板有问题。

这是代码:

//main.cpp
main(){
    gestione_bagagli bag;
    Data da(10,8,1980);
    Proprietario pr("Luca","Verdi",da,"Este",true);
    Viaggio vi("12345","Roma");
    speciale b(20,30,48,30,pr,vi);
    speciale& c=b;
    bag.lug.push_back(b);
}
//gestione_bagagli.h
class gestione_bagagli{
    friend std::ostream& operator <<(std::ostream&,const gestione_bagagli&);
public:
    Lista<bagaglio*> lug;
    gestione_bagagli(){}
    template <class T>
    gestione_bagagli(const Lista<T>&){}
};
//contenitore.h
template<class T>
class Lista{
friend class iteratore;
friend std::ostream& operator<< <T>(std::ostream&, const Lista<T>&);
private:
    class nodo{
    public:
        nodo(){}
        nodo(const T& bag, nodo* p, nodo* n): b(bag),prev(p),next(n){}
        T b;
        nodo* prev;
        nodo* next;
    };
    int n_el;
    nodo* first, *last;
public:
    Lista():first(0),last(0),n_el(0){}
    void push_back(const T& b){
        if(first && last){
            last->next=new nodo(b,last,0);
            last=last->next;
        }else first=last=new nodo(b,0,0);
        n_el++;
    }
};


问题出在bag.lug.push_back(b);
speciale是派生类型,但是问题在于模板的位置。
错误是“ main.cpp:14:错误:没有匹配的函数来调用'Lista :: push_back(speciale&)'”,其中bagaglio是层次结构的基类。

我知道,我需要显式定义函数模板,但这不起作用!
我尝试了这个:

bag.lug.push_back <bagaglio*>(b);


但是是一个sintax错误

最佳答案

您正在将speciale推送到bagaglio*列表中。除非speciale具有指向bagaglio的指针的转换运算符,否则不会发生这种情况。

也许您想将指针推到speciale

bag.lug.push_back(&b); //notice the address-of operator

关于c++ - 与模板C++,OOP的“…”调用不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35688396/

10-11 01:54