我在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/