2012-08-30 72 views
5

我得到了一個循環,其中我使用了一個函數將std :: unique_ptr返回給抽象類的對象。我想通過push_back將這些對象存儲到std :: vector中。但由於對象是抽象類型的,我得到了以下錯誤:如何存儲由std :: unique_ptr給出的抽象類對象的向量?

error: cannot allocate an object of abstract type 

爲線

cells.push_back(std::move(*cell)); 

,其中細胞是抽象類型的std::vectorcell類型爲

std::unique_ptr<AbstractType>&& cell 

(我實際上將cell傳遞給處理程序類) 我知道不能實例化抽象類型,因爲我理解std:move操作符需要以某種方式實例化對象嗎?

任何人都可以幫助我如何管理這個問題嗎?還是應該函數(不是我的項目的一部分)不返回一個唯一指向抽象類型的對象的指針?

+6

我們在談論一個'vector '嗎?這是行不通的。代之以存儲'vector >'。 –

+0

你是對的!我是盲人,我將它改爲'vector >',現在它可以工作 – soriak

+0

@ R.MartinhoFernandes:對你的評論+1(這應該是一個答案)。你必須讀懂頭腦! –

回答

9

您不能直接在std::vector上存儲AbstractType元素。您可以簡單地將unique_ptr自己存儲在std::vector<std::unique_ptr<AbstractType>>cells.push_back(std::move(cell))中。

+0

原因是你正在調用複製構造函數,因此試圖實例化一個抽象類。 –

相關問題