多级继承给出“对vtable的未定义引用”错误

时间:2020-09-21 03:51:03

标签: c++ inheritance vtable multi-level

我对c ++还是比较陌生,并且实现如下:

class A {
  virtual void func1() = 0;
};

class B : A {
  void func1() override{
    // imlement func1 here
  }
  virtual func2() = 0;
}

class C : B {
  void func2() override{
    // implement func2 here;
  }
}

这些类打包为它们自己的二进制文件,并且可以单独构建。

B构建成功,但是当我构建C时,它给出了“未定义对vtable的引用”错误。 要摆脱它,我必须在C中实现func1()。

但是对于func1(),我希望在B中实现(因为在我的项目中,B是现有的遗留类)在C中而不是在C中。有办法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我喜欢@David C. Rankin's参考。您应该尝试至少在类A和B(可能还有C)中添加虚拟默认析构函数。另外,在您的代码段中,您缺少了一些东西(例如B的func2定义上的返回类型,等等)。这是带有虚拟默认析构函数的清理示例:

class A {
public:
    virtual void func1() = 0;
    virtual ~A() = default;
};

class B : A {
public:
    void func1() override {
        // implement func1 here;
    }
    virtual void func2() = 0;
    virtual ~B() = default;
};

class C : public B {
public:
    void func2() override {
        // implement func2 here;
    }
    virtual ~C() = default;
};
相关问题