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

C++如何正确继承基类并重写虚函数?SDL2开发遇基类未定义报错

问题原因及修复方案

1. 基类未定义报错

该问题90%以上是头文件循环引用导致的:你在GameObj.h中引入了Game.h,如果Game.h中又反过来引入了GameObj.h或者Player.h,就会形成引用死循环,编译时GameObj还没完成定义就被Player读取,触发未定义报错。
修复方法:

  • 检查Game.h的头文件引入逻辑,如果Game.h中仅用到GameObj/Player的指针或引用,不需要完整类定义,直接在Game.h中加前置声明即可,不需要引入对应的头文件:
class GameObj;
class Player;
  • 把Game.h中对GameObj.h、Player.h的引用移到Game.cpp中,打破循环引用链。

2. 虚函数不存在报错

该报错一般是基类未定义的衍生问题,解决完循环引用后如果还存在,检查两个配置项:

  • 确认你的编译器开启了C11及以上标准支持,override关键字是C11新增特性,老标准下无法识别,会误判为你要定义新函数而非重写父类虚函数。GCC/Clang编译时加上-std=c++11(或更高的c++17/c++20)参数即可,Visual Studio在项目属性的C++语言标准选项中调整即可。
  • 检查虚函数的签名是否完全一致,你当前代码中update函数的返回值、参数列表都和父类纯虚函数匹配,不需要调整。

额外优化建议

你Player类中单独定义的x、y成员可以直接复用父类protected修饰的dstR.x、dstR.y,不需要额外存储两份位置数据,避免后续开发中出现两边值不一致的逻辑问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:21:01