C++跨文件引用类时出现Unknown override specifier错误如何解决
问题根因
你遇到的是C++典型的头文件循环引用错误:Game.h引入了Albert.h,而Albert.h又引入了Game.h,两个头文件互相依赖,预处理阶段无论调整什么引入顺序,都会出现其中一个类的定义还未被解析、就被另一个类调用的情况,所以会报未知类型的编译错误。
从你提供的代码来看,Albert类的成员变量、方法参数完全没有用到Game相关类型,Albert.h里的#include "Game.h"属于完全多余的引用。
解决方案
当下直接修复方法
直接删除Albert.h顶部的#include "Game.h"代码即可打破循环依赖,直接编译通过。
后续如果确实需要在Albert中引用Game类型的处理方案
如果后续开发中Albert需要用到Game类型,遵循「头文件尽量用前向声明、实现文件再引入头文件」的原则处理即可:
- 将
Albert.h中的#include "Game.h"替换为前向声明语句class Game; - 在
Albert.cpp实现文件中再引入Game.h - 如果需要在类中存储另一个类的实例作为成员,将成员改为指针类型配合前向声明即可,比如将
Game game;改为Game* game;,避免头文件中需要知道完整类定义的要求。
你之前调整引入顺序可以解决的是单向依赖顺序错误的问题,循环依赖属于逻辑层面的依赖冲突,仅调整引入顺序无法解决,和命名空间使用无关。
内容的提问来源于stack exchange,提问作者ChikenMilk
相关产品推荐
相关产品推荐

