好吧,我要做的是将我调用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
(翻译自德语)
我该怎么办?还有其他方法可以做我想要的吗?不使用数组?
答案 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的实例,而不是它们的指针