【问题标题】:insert an template object in vector with inheritance c++在具有继承c ++的向量中插入模板对象
【发布时间】:2014-10-24 17:45:11
【问题描述】:

我有一个用模板定义的类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>>&'

【问题讨论】:

    标签: c++ templates inheritance


    【解决方案1】:

    这是错误的行:

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

    只需阅读它,您就没有指定用于实例化/模板定义的类型。 提供的代码太差,但您必须用有效类型替换“T”。 喜欢

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

    【讨论】:

    • 声明向量时不能在 main.cpp 中使用 T,请改用
    • 我更新了代码,但给了我这个错误信息:没有匹配函数调用 'std::vector>::push_back(Depositos**)' :/
    • @user3689180 d 已经是一个指针,你只需要dep.push_back(d);&amp;d 创建一个指向指针的指针 (Despositos&lt;int&gt;**)。
    • 最后一个问题,我有这个方法 createDN(const Depositos &d){ dep.push_back(d); } 但给了我同样的错误。我发送 Depositos*d= new Deposito_Normais(1,1,1,1);如果我将 & 更改为 * 会起作用吗?
    • 在你的方法中,因为 d 是一个引用,使用 &d 以获得一个指针:push_back(&d)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多