&#34;无法将Class <t> *中的参数转换为Class <t>&amp;&amp;&#34;在列表插入

时间:2018-03-18 21:19:59

标签: c++

在C ++中,我构建了一个基本类,如:

class MyList {
protected:
    list<MyOtherClass<int>> nodes;
    int size;
...
}

但是稍后我在MyList中尝试将值插入节点列表时,例如:

MyOtherClass<int>* temp = new MyOtherClass<int>(size);
nodes.push_back(temp);

我收到编译错误

cannot convert argument 1 from 'MyOtherClass<int> *' to 'MyOtherClass<int> &&'

我绞尽脑汁,尝试了一切我想到的东西来解决它。想法?

2 个答案:

答案 0 :(得分:1)

那是因为类型不兼容。您的列表属于list<MyOtherClass<int>>temp的类型为MyOtherClass<int>*。试试这个:

MyOtherClass<int> temp(size);
nodes.push_back(temp);

或者这个:

class MyList {
protected:
    list<MyOtherClass<int> *> nodes;
    int size;
...
}

答案 1 :(得分:0)

  

但是稍后我在MyList中尝试将值插入节点列表时,例如:

 MyOtherClass<int>* temp = new MyOtherClass<int>(size);
 nodes.push_back(temp);
     

我收到编译错误

那是因为您没有插入MyOtherClass<int>值。您正在插入指向不必要的动态分配MyOtherClass<int>值的指针。不要那样做。

只需以正常方式创建新对象:

MyOtherClass<int> temp(size);
nodes.push_back(temp);

甚至:

nodes.emplace_back(size);

通常(除非你正在写一些库代码或分配器)当你写了new时,你犯了一个错误,或者暂时忘记了你写的是什么语言。:)是的,我知道那里网上有一百万个“教程”,告诉你new的事情。他们错了。