[英]Initialize static std::map member inside templated class?
Here is a code snippet from my project: 这是我的项目中的代码片段:
template<typename Second, typename First = const UINT64>
class Event : virtual public id_manager<>
{
friend class EventHandler;
typedef std::map<First, EventHandler> eventMap;
static eventMap mapper;
static eventMap StartMapping()
{
eventMap temp;
return temp;
}
public:
Event(){}
void operator+=(EventHandler _handler)
{
mapper[this->getID()] = _handler;
}
};
// INITIALIZATION FAILED HERE:
template<typename Second, typename First = const UINT64>
Event<Second, First>::eventMap Event<Second, First>::mapper(Event<Second, First>::StartMapping());
Here is output error from Visual studio 2010: 这是Visual Studio 2010的输出错误:
Warning 1 warning C4346: 'Event::eventMap' : dependent name is not a type c:\\users\\admin\\documents\\visual studio 2010\\projects\\cppsystem\\cppsystem\\main.cpp 67 Error 2 error C2143: syntax error : missing ';'
警告1警告C4346:'Event :: eventMap':相关名称不是类型c:\\ users \\ admin \\ documents \\ visual studio 2010 \\ projects \\ cppsystem \\ cppsystem \\ main.cpp 67错误2错误C2143:语法错误:缺少';' before 'Event::mapper' c:\\users\\admin\\documents\\visual studio 2010\\projects\\cppsystem\\cppsystem\\main.cpp 67 Error 3 error C4430: missing type specifier - int assumed.
在“事件::映射器”之前c:\\ users \\ admin \\ documents \\ visual studio 2010 \\ projects \\ cppsystem \\ cppsystem \\ main.cpp 67错误3错误C4430:缺少类型说明符-假定为int。 Note: C++ does not support default-int c:\\users\\admin\\documents\\visual studio 2010\\projects\\cppsystem\\cppsystem\\main.cpp 67 Error 4 error C1903: unable to recover from previous error(s);
注意:C ++不支持default-int c:\\ users \\ admin \\ documents \\ visual studio 2010 \\ projects \\ cppsystem \\ cppsystem \\ main.cpp 67错误4错误C1903:无法从以前的错误中恢复; stopping compilation c:\\users\\admin\\documents\\visual studio 2010\\projects\\cppsystem\\cppsystem\\main.cpp 67
停止编译c:\\ users \\ admin \\ documents \\ Visual Studio 2010 \\ projects \\ cppsystem \\ cppsystem \\ main.cpp 67
I hope this pice of code is enough. 我希望这些代码足够了。 I can't initialize static map member using "initialization functin" for that map.
我无法使用该地图的“初始化函数”来初始化静态地图成员。 thanks alot!
非常感谢!
You need typename
to tell the compiler that the eventMap is a type. 您需要使用
typename
来告诉编译器eventMap是一种类型。
template<typename Second, typename First = const UINT64>
typename Event<Second, First>::eventMap Event<Second, First>::mapper(Event<Second, First>::StartMapping());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.