我试图在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;**
答案 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;