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

C++继承Shape抽象类时出现rt::Plane类vtable缺失错误如何解决

问题原因

你复制Sphere代码改写Plane的操作本身没有问题,代码层面的虚函数声明、实现都符合语法要求,报错的根源在构建配置缺失:
从make VERBOSE=1的输出可以看到,链接阶段参与编译的shape类目标文件只有Sphere.cpp.o,没有你新增的Plane.cpp.o,说明Plane.cpp没有被纳入CMake的编译源文件列表。
Clang编译器会将类的虚函数表(vtable)存放在该类第一个非内联虚函数实现对应的编译单元中,你的Plane类第一个非内联虚函数intersect的实现写在Plane.cpp里,这个文件没有被编译,链接时自然找不到Plane类的vtable,就抛出了对应的错误提示。

解决方法

  1. 找到项目中配置编译源文件的CMakeLists.txt:通常是shapes目录下的CMakeLists.txt,或者项目根目录的CMakeLists.txt
  2. 在add_executable(或对应生成raytracer目标的配置段)的源文件列表中,找到已经配置的shapes/Sphere.cpp,在同一位置新增shapes/Plane.cpp
  3. 重新执行cmake .生成新的构建配置,再运行make编译即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:39:03