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/

10-11 16:09