在GCC中专门化静态类变量的错误:枚举示例

时间:2015-12-29 21:42:04

标签: c++ gcc static enumeration

我试图在GCC 4.8.5(x86_64-suse-Linux)中编译C ++中的枚举示例:

http://www.drdobbs.com/when-enum-just-isnt-enough-enumeration-c/184403955?pgno=1  (见下面的代码)

但是我收到了一个错误:

C2065 at game.cpp "objects.insert"
C2143 at game.h "vector<GameObject> objects"
C2228 at game.cpp "objects.insert"
C2238 at game.h "vector<GameObject> objects"
C4430 at game.h "vector<GameObject> objects"

我试图将&#39;模板&lt;&gt;&#39;在定义s_instances之前:

Test_Enum_String.cpp:5:1: error: specializing member ‘Tmpl_Enum<std::basic_string<char>, Test_Enum_String>::s_instances’ requires ‘template<>’ syntax
 Tmpl_Enum<std::string, Test_Enum_String>::s_instances;

但我发现了更多错误:

Template <> static instances_list s_instances;

这是我的代码

Tmpl_Enum.hpp:30:12: error: explicit specialization in non-namespace scope ‘class Tmpl_Enum<TValue, T>’
 template <> static instances_list s_instances;**

2 个答案:

答案 0 :(得分:1)

最后我发现了问题。要求初始化变量以获得特化,所以:

template <>
Tmpl_Enum<std::string, Test_Enum_String>::instances_list Tmpl_Enum<std::string, Test_Enum_String>::s_instances=
        std::set<const Tmpl_Enum<std::string, Test_Enum_String>*, Enum_Ptr_Less> ();

线索是:C++: specializing member requires «template<>» syntax

我是初学者,但使用模板所需的语法令人生畏。

答案 1 :(得分:0)

您可以尝试添加template<>

像这样:

template<>
Tmpl_Enum<std::string, Test_Enum_String>::instances_list
Tmpl_Enum<std::string, Test_Enum_String>::s_instances;