簡體   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