Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:如何在声明枚举类的模板类主体之外定义枚举类? 我有一些C++代码,它的形式如下: template <typename type> class foo { type a; class bar; }; template <typename type> class foo<type>::bar { enum class baz; }; template <typename type> enum class foo<type>::bar::baz { val1, val2 }; 模板 福班 { a型; 分类栏; }; 模板 类foo::bar { 枚举类baz; }; 模板 枚举类foo::bar::baz { 瓦尔1, 瓦尔2 };_C++_Templates_Enums_Nested_Forward Declaration - Fatal编程技术网

C++;:如何在声明枚举类的模板类主体之外定义枚举类? 我有一些C++代码,它的形式如下: template <typename type> class foo { type a; class bar; }; template <typename type> class foo<type>::bar { enum class baz; }; template <typename type> enum class foo<type>::bar::baz { val1, val2 }; 模板 福班 { a型; 分类栏; }; 模板 类foo::bar { 枚举类baz; }; 模板 枚举类foo::bar::baz { 瓦尔1, 瓦尔2 };

C++;:如何在声明枚举类的模板类主体之外定义枚举类? 我有一些C++代码,它的形式如下: template <typename type> class foo { type a; class bar; }; template <typename type> class foo<type>::bar { enum class baz; }; template <typename type> enum class foo<type>::bar::baz { val1, val2 }; 模板 福班 { a型; 分类栏; }; 模板 类foo::bar { 枚举类baz; }; 模板 枚举类foo::bar::baz { 瓦尔1, 瓦尔2 };,c++,templates,enums,nested,forward-declaration,C++,Templates,Enums,Nested,Forward Declaration,通过这段代码,我试图使枚举类能够被foo::bar中的方法访问,并能够存储此枚举类类型的数据。枚举类也不是模板类型-枚举类枚举数是整数/枚举类的默认类型 然而,当我编译这是MinGW/Code::Blocks时,这似乎会产生两条错误消息,两条消息都在同一行: enum class foo<type>::bar::baz 枚举类foo::bar::baz 错误:“enum baz”的模板声明 错误:尚未声明foo::bar 我认为这几乎肯定是一个编译器错误。基于这个,我会说这肯定是

通过这段代码,我试图使枚举类能够被foo::bar中的方法访问,并能够存储此枚举类类型的数据。枚举类也不是模板类型-枚举类枚举数是整数/枚举类的默认类型

然而,当我编译这是MinGW/Code::Blocks时,这似乎会产生两条错误消息,两条消息都在同一行:

enum class foo<type>::bar::baz
枚举类foo::bar::baz 错误:“enum baz”的模板声明

错误:尚未声明foo::bar


我认为这几乎肯定是一个编译器错误。基于这个,我会说这肯定是有效的C++。clang和icc似乎都很好地编译了这段代码。然而,GCC(MinGW基本上是GCC)和MSVC显然都无法编译这个。似乎两个编译器(即使是在其最新版本中)都将类模板的枚举成员定义错误为试图声明枚举模板(这确实是非法的)

编辑:在MSVC的情况下,似乎已经有一个未解决的问题