class Road {
private:
std::vector<Vehicle*> container;
public:
std::vector<Vehicle*> getContainer(){
return container;
}
virtual void operator+(Vehicle *vehicle)=0;
};
class Highway: public Road {
public:
virtual void operator+(Vehicle *vehicle) {
getContainer().push_back(vehicle);
}
};
当所有虚拟函数都被覆盖时,为什么会出现无法分配抽象类型对象的错误?
当我尝试在主类中调用
Road r = Highway();
时,就会发生这种情况。 最佳答案
对于Road r = Highway();
,Road r
表示您正在尝试定义类型为Road
的对象,该对象是抽象类,因此不允许定义。初始化程序列表部分(即= Highway()
)不影响r
的类型,仅表示r
是从Highway
类型的临时对象初始化的slicing-copy。
您应该使用具有抽象类类型的指针/智能指针或引用,例如
Road* r = new Highway;
// using r ...
delete r;
要么
Highway h;
Road& r = h;
// using r ...
关于c++ - 尝试定义从抽象类派生的类类型的对象时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41522948/