对vtable的未定义引用;虚拟功能问题

undefined reference to vtable; virtual function issue

本文关键字:虚拟 功能 问题 引用 vtable 未定义      更新时间:2023-10-16

假设我用声明覆盖子类中的虚拟函数,并且不给出该方法的定义。例如:

class Base
{
    virtual void f() = 0;
}
class Derived : public Base
{
    void f();
}

(这里我还没有给出f的定义)。如果我现在使用类Derived,是否可能会出现编译器错误,如"对vtable的未定义引用…"?

不适用于f。您已经明确表示函数将没有实现,这意味着派生类必须实现它

但是,如果您声明一个纯虚拟析构函数(例如virtual ~Base()= 0),则必须在某个地方提供一个定义。在这种情况下,如果不这样做,您将得到一个"未定义的vtable引用…"错误。