如何解决C++编译报Unit/SpellCaster未声明的has not been declared错误
问题解决方法
错误原因
是头文件循环引用导致的编译错误:Unit.h 引入了 SpellCaster.h,SpellCaster.h 又反过来引入 Unit.h,预处理器展开头文件时,其中一个类的定义尚未完成,另一个类就已经需要引用它的类型,因此触发未声明报错。
解决步骤
- 第一步:删除两个头文件中互相引入的对方头文件
- 删除
Unit.h中的#include "SpellCaster.h" - 删除
SpellCaster.h中的#include "Unit.h"
- 删除
- 第二步:为两个类分别添加前向声明
在Unit.h的class Unit定义上方添加前向声明:
在class SpellCaster;SpellCaster.h的class SpellCaster定义上方添加前向声明:class Unit; - 第三步:在两个类的实现文件(
Unit.cpp、SpellCaster.cpp)中引入对方的头文件,实现代码调用类成员时需要读取完整的类定义,因此需要在cpp中引入头文件。
额外优化建议
给所有头文件增加头文件守卫,避免重复包含问题,可以直接在每个头文件最上方添加 #pragma once 语句即可。
内容的提问来源于stack exchange,提问作者egor
相关产品推荐
相关产品推荐

