繁体   English   中英

向量push_back:不转换参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM