2011-11-09 33 views
1

我得到的「矢量」類中出現的錯誤,如,你訪問類的時候你#包括<矢量>錯誤鎖定「矢量」文件

我得到大多是錯誤的是:

錯誤1錯誤C2259:「槍」:不能實例化抽象類

這個類,槍,確實是抽象的,但我已經檢查了代碼,並在任何地方出現的這種試圖創建一個實例。什麼是,是幾個定義

載體<槍>等等;

作爲將由派生類填充的類實例成員,以便我可以使用它們的多態函數。

雖然我無法訪問矢量類來改變它(即使我能我不會想)我可以看到它的一部分的錯誤是在發生代碼:

的這個第一線塊:

void resize(size_type _Newsize, _Ty _Val) 
    { // determine new length, padding with _Val elements as needed 
    if (size() < _Newsize) 
     _Insert_n(end(), _Newsize - size(), _Val); 
    else if (_Newsize < size()) 
     erase(begin() + _Newsize, end()); 
    } 

回答

5

載體聲明爲

std::vector<Gun> 

將只包含槍對象。如果你嘗試放置一個派生自Gun的實例,那麼該對象將被切割成它的Gun部分,這是抽象的。您將需要存儲的指針在矢量動態分配的副本,就像

std::vector<Gun*> 

爲了保全自己提領和刪除邏輯,使用升壓轉換器的指針容器:

#include <boost/ptr_container/ptr_vector.hpp> 
boost::ptr_vector<Gun> 
2

你不能因爲當你做矢量要創建該類型的對象,如果你是 inherting這我想你需要做的

Ak47 *gun1 = new Ak47(ammo); 
vector<Gun*> guns; 
guns[0]=&*gun1; 
+0

「guns.push_back(gun1);」更安全,更簡單。 – kist

1

std::vector持有按值對象,因此Gun對象將被實例化,這就是爲什麼你會得到一個錯誤。