C++ 使用前向声明类中的枚举
当前问题: 我需要从前向声明的类访问枚举,类似于这种情况: Human.hC++ 使用前向声明类中的枚举,c++,enums,C++,Enums,当前问题: 我需要从前向声明的类访问枚举,类似于这种情况: Human.h #包括“Dog.h” 阶级人{ 公众: 枚举语言:uint32\u t{ 无=0, 英语=1, 日语=2, }; } Dog.h 类人; 班犬{ 无效理解(人类:语言-言语); } Dog.cxx #包括“Dog.h” #包括“Human.h” void Dog::理解(人类::语言语音){ //用人类语言做事 返回; } 错误: IDE告诉我Dog.cxx的实现与Dog.h的减速不兼容,在错误提示中将枚举引用为
#包括“Dog.h”
阶级人{
公众:
枚举语言:uint32\u t{
无=0,
英语=1,
日语=2,
};
}
Dog.h
类人;
班犬{
无效理解(人类:语言-言语);
}
Dog.cxx
#包括“Dog.h”
#包括“Human.h”
void Dog::理解(人类::语言语音){
//用人类语言做事
返回;
}
错误:
- IDE告诉我Dog.cxx的实现与Dog.h的减速不兼容,在错误提示中将枚举引用为
(仅红色蠕动) - 编译时,如果在Dog.h/c.xx中提到枚举,就会抛出错误,无法找到枚举
- MSVC 15 2017
- 程序的完整体系结构要求枚举可以像这样访问
- 为了解决我的程序中的循环依赖关系(这里没有看到),必须向前减速
struct HumanBase
{
枚举语言:uint32\u t{
无=0,
英语=1,
日语=2,
};
};
//fwd申报
结构人;
enum人类语言:uint32\t{
无=0,
英语=1,
日语=2,
};
结构人;
如果以后需要,您可以执行以下操作:
struct-Human
{
人类语言;
};
类狗{
模板(1)您是指狗类中的Human::Language而不是Dog::Language吗?(2)重复-?狗::语言的定义在哪里?我只能看到人类::语言的定义。我对这个错误表示歉意,它已经被修复了。为什么需要向前声明?你不能只包含标题吗?也许我们需要更多的上下文。一般来说,你不能用向前声明的类做任何事情除了声明指向它的指针,我发现选项1是最简单和最有效的