C++ 使用前向声明类中的枚举

C++ 使用前向声明类中的枚举,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的减速不兼容,在错误提示中将枚举引用为

当前问题:

我需要从前向声明的类访问枚举,类似于这种情况:

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/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是最简单和最有效的