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