[英]Vector push_back: doesn't convert parameter
好吧,我想做的是将我称为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
(从德语翻译)
我该怎么办? 还有其他方法可以做我想要的吗? 不使用数组?
new
返回指向动态分配对象的指针。 这不是您要在此处执行的操作。 通常,您要将一个临时(或已经存在的)对象传递给push_back
,它将把一个副本插入到内存中。
因此,只需摆脱new
。 像这样:
std::vector<std::vector<Block>> mapvec;
mapvec[xcnt].push_back(Block(xcnt,ycnt));
这将创建一个临时的Block
,并将一个副本插入到向量中。
如果要使用new
,则需要将指针存储在向量中,而不是Block
objects。 最安全的方法是使用智能指针:
std::vector<std::vector<std::unique_ptr<Block>>> mapvec;
mapvec[xcnt].push_back(std::unique_ptr<Block>(new Block(xcnt, ycnt)));
这样,从向量中删除项目或破坏向量后,将立即使用delete
释放使用new
分配的内存。
将您的mapvec
定义为
std::vector<std::vector<Block*>> mapvec;
代替?
new Block(xcnt,ycnt)
给您Block*
指向新分配的Block
。 而且您的向量期望Block
而不是Block*
更改为
mapvec[xcnt].push_back(Block(xcnt,ycnt));
这会将您的Block
复制到向量中,因此Block
类应该具有可访问的复制构造函数。
你应该 :
mapvec[xcnt].push_back(Block(xcnt,ycnt));
因为您持有的是Block的实例,而不是它们的指针
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.