You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++报Undefined Reference to `vtable`错误但已有虚析构函数如何解决?

错误原因

Scene基类中声明的Initialise()、Update()、CloseDown()三个虚函数仅完成了声明,没有提供默认实现。主流C++编译器生成类虚表时,会将虚表输出到该类第一个非内联、非纯虚的虚函数对应的编译目标文件中,由于Scene类缺失这三个虚函数的实现,编译器无法生成完整的虚表,链接阶段就会抛出vtable未定义的错误。

解决方案

根据你的业务设计选择以下任意一种方案即可:

  • 方案一:为基类虚函数补全默认实现
    你可以直接在头文件的类定义内写内联实现:
// Scene.h中修改对应声明
virtual void Initialise() {}
virtual void Update() {}
virtual void CloseDown() {}

也可以在Scene.cpp中补充全局实现:

// Scene.cpp中添加以下代码
void Scene::Initialise() {}
void Scene::Update() {}
void Scene::CloseDown() {}
  • 方案二:将基类声明为抽象类
    如果Scene本身不需要被实例化,仅作为统一接口定义,直接将三个虚函数声明为纯虚函数即可:
// Scene.h中修改对应声明
virtual void Initialise() = 0;
virtual void Update() = 0;
virtual void CloseDown() = 0;

补充排查项

如果修改后仍报相同错误,可检查以下两项配置:

  • 确认Scene.cpp、MainGame的实现文件都已加入项目编译队列,没有被遗漏参与编译和链接
  • 确认Scene类的定义和实现都被包裹在Engine命名空间下,和MainGame类的继承声明匹配。

内容的提问来源于stack exchange,提问作者Shakier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:45:02