【问题标题】:Multilevel inheritance giving 'Undefined reference to vtable' error多级继承给出“未定义的 vtable 引用”错误
【发布时间】:2020-09-21 03:51:03
【问题描述】:

我对 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 中。有没有办法做到这一点?

谢谢

【问题讨论】:

  • packaged as their own binaries 这需要更多细节。如果您的意思是某种共享/动态库,那么您必须以某种方式“导出”这些类,而这样做的方法是特定于平台和编译器的。
  • 这能回答你的问题吗? Undefined reference to vtable

标签: c++ inheritance vtable multi-level


【解决方案1】:

我喜欢@David C. Rankin's 参考。您应该尝试至少在 A 类和 B 类(也许还有 C)中添加一个虚拟默认析构函数。此外,在您的代码 sn-p 中,您遗漏了一些东西(例如 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;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2015-04-08
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多