在带有继承c ++的向量中插入模板对象

时间:2014-10-24 17:45:11

标签: c++ templates inheritance

我使用模板定义了类Deposito,我想创建一个Depositos_Normais的对象,但它给了我这个错误消息:

 error: cannot convert Depositos_Normais<Depositos<int>*>* to 
 Depositos<Depositos>>* in assignment

Depositos上课:

template <class T>
class Depositos {
public:
  Depositos(int id, int num_palets, int capac_max, int area_total); 
}
template <class T>
Depositos<T>::Depositos(int id, int num_palets, int capac_max, int area_total) {...}

Depositos_normais类:

template <class T>
class Depositos_Normais : public Depositos<T> {
public:
  Depositos_Normais(int id, int num_palets, int capac_max, int area_total):
}
template <class T>
Depositos_Normais<T>::Depositos_Normais(
  int id, int num_palets, int capac_max, int area_total
):
  Depositos<T>(id, num_palets, capac_max, area_total)
{

Main.cpp的:

Armazem<Depositos<int>> arm (1,1,1,1);
Depositos <int>* d= new Depositos_Normais<int>(int,int,int,int)
vector<Depositos<T>*> dep;
dep.push_back(&d);

谁知道想要错?

EDIT::
template <class T>
void Armazem<T>::criarDepositoNormal(Depositos<T> &Dep) {
depos.push_back(Dep);
   }

main.cpp
Depositos <int>* d= new Depositos_Normais<int>(int,int,int,int);
arm.criarDepositoNormal(d);   <-Error  no know conversion for argument 1 from 'Depositos<int>*' to 'Depositos<Depositos<int>>&'

1 个答案:

答案 0 :(得分:1)

这是错误的界限:

Depositos <T>* d= new Depositos_Normais<T>(int,int,int,int)

简单地读取它你没有指定用于实例化/模板定义的类型。 提供的代码太差,但您必须替换“T&#39;有效的类型。 像

Depositos <float>* d= new Depositos_Normais<float>(int,int,int,int)