Vector push_back:不转换参数

时间:2013-04-25 17:51:58

标签: c++

好吧,我要做的是将我调用Block类的对象推回到保留Block元素的不同向量上,并保存在向量中。

std::vector<std::vector<Block>> mapvec;
mapvec[xcnt].push_back(new Block(xcnt,ycnt));

这是我迄今为止的进步。

error C2664: 'std::vector<_Ty>::push_back': convetion of the parameter 'Block *' in 'const Block &' not possible

(翻译自德语)

我该怎么办?还有其他方法可以做我想要的吗?不使用数组?

4 个答案:

答案 0 :(得分:2)

new返回指向动态分配对象的指针。这不是你想要做的。通常,您希望将临时(或已存在)对象传递给push_back,并将其复制到内存中。

所以,简单地摆脱new。像这样:

std::vector<std::vector<Block>> mapvec;
mapvec[xcnt].push_back(Block(xcnt,ycnt));

这将生成一个临时的Block - 对象并将一个副本插入到向量中。

如果要使用new,则需要在向量中存储指针,而不是Block - 对象。最安全的方法是使用智能指针:

std::vector<std::vector<std::unique_ptr<Block>>> mapvec;
mapvec[xcnt].push_back(std::unique_ptr<Block>(new Block(xcnt, ycnt)));

这样,只要从向量中移除项目或向量被销毁,就会使用new释放分配有delete的内存。

答案 1 :(得分:1)

将您的mapvec定义为

std::vector<std::vector<Block*>> mapvec;

代替?

答案 2 :(得分:1)

new Block(xcnt,ycnt) 

为您Block*指向新分配的Block。您的向量预计Block不是Block*


将其更改为

mapvec[xcnt].push_back(Block(xcnt,ycnt));

这会将Block复制到向量中,以便Block类具有可访问的复制构造函数。

答案 3 :(得分:0)

你应该:

mapvec[xcnt].push_back(Block(xcnt,ycnt));

因为你持有Block的实例,而不是它们的指针