我有一个抽象类:无法实例化抽象类
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.
为什么编译器是窒息任何想法?这是一个编译器错误?