我有一個抽象類:無法實例化抽象類
class myabsclass {
public:
virtual int func1() = 0;
virtual int func2() = 0;
};
和類實現它:
class myclass : public myabsclass {
public:
myclass() {}
int func1() { return 0; }
int func2() { return 1; }
private:
int a,b,c;
}
class myclass2 : public myabsclass {
public:
myclass2() {}
int func1() { return 3; }
int func2() { return 4; }
private:
int d,e,f;
}
如果我持有各類myabsclass抽象類的implementions的矢量:
vector<myabsclass> vec;
我得到一個錯誤,當我嘗試這樣做:
在VSvec.push_back(myclass);
vec.push_back(myclass2);
錯誤消息:
Cannot instantiate abstract class
我試圖理解爲什麼,考慮到我相信這應該是有效的。矢量需要持有各種不同類型的這一類的實現的,所以我不能明確地讓它的實現者的一個載體:
vector<myclass> vec; // Wont work since I need to put myclass2 in there.
爲什麼編譯器是窒息任何想法?這是一個編譯器錯誤?