gpt4 book ai didi

c++ - vector push_back : doesn't convert parameter

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:09 24 4
gpt4 key购买 nike

好吧,我想做的是将我称为 Block 的类的对象推回到不同的 vector 上,这些 vector 保留 Block 元素并保存在 vector 自己。

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 对象并将一个拷贝插入 vector 中。

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

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

这样,一旦您从 vector 中删除项或 vector 被销毁,使用new 分配的内存将使用delete 释放。

关于c++ - vector push_back : doesn't convert parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16221439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com