我已經改變了我的代碼使用爲什麼boost :: ptr_vector的訪問元素嘗試實例化新對象?
std::vector<A*>
到使用
boost::ptr_vector<A>
,並碰到了一個問題。
下面的代碼:
class A
{
protected:
virtual int getNumber() {return 1;};
public:
static int getSum(boost::ptr_vector<A> &pv){
int sum = 0;
for(std::vector<int>::size_type i = 0; i != pv.size(); i++) {
sum += pv[i].getNumber();
}
return sum;
}
virtual ~A(void)=0;
}
現在,由於更改爲ptr_vector,我得到一個編譯錯誤:
error C2259: 'A' : cannot instantiate abstract class
due to following members:
'A::~A(void)' : is abstract
上線
sum += pv[1].getNumber();
這是我第一次使用ptr_vector的時候如此原諒我,如果我失去了明顯的東西,但爲什麼它試圖實例化,以及如何避免ED?
如果您可以顯示創建A對象並將其分配給ptr_vector的代碼,這將會很有幫助。 –
任何可以重現問題的[sscce](http://www.sscce.org/)的機會?我[嘗試](http://coliru.stacked-crooked.com/a/bea89e4c6ac9fc6f)重現編譯器錯誤,但無法這樣做。 –