2

好吧,我要做的是将我调用的类的对象推回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

4 回答 4

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

于 2013-04-25T17:57:07.633 回答
1

定义你mapvec

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

反而?

于 2013-04-25T17:55:01.513 回答
1
new Block(xcnt,ycnt) 

让您Block*指向新分配的Block. 而且您的向量Block不希望Block*


将其更改为

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

这会将您复制Block到向量中,因此Block类应该具有可访问的复制构造函数。

于 2013-04-25T17:55:12.897 回答
0

你应该 :

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

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

于 2013-04-25T18:42:15.167 回答