我已经创建了一个消息窗口类,并且我试图将HWND映射回带有这些句柄的对象。我想这样做,使用专用静态std::map<HWND, CMyClass*>
属于类,像这样:如何初始化静态std :: map?
MyClass.h:
class CMyClass
{
...
private:
HWND m_hWnd;
HINSTANCE m_hInstance;
LPCSTR m_szClassName;
static std::map<HWND, CMyClass*> s_mapHandles;
...
};
MyClass.cpp:
std::map<HWND, CMyClass*> CMyClass::s_mapHandles;
但是当我尝试要添加到地图,程序崩溃。我已经尝试三种不同的形式,他们都给予了同样的错误:
...
m_hWnd = ::CreateWindowEx(0, m_szClassName, "Message Window", 0, 0, 0, 0, 0, HWND_MESSAGE, 0, m_hInstance, 0);
s_mapHandles.insert(pair<HWND, CMyClass*>(m_hWnd, this));
或
...
s_mapHandles.insert(s_mapHandles.end(), pair<HWND, CMyClass*>(m_hWnd, this));
甚至
...
s_mapHandles[m_hWnd] = this;
在每种情况下,出现崩溃在呼叫到_Root()
试图返回_Parent(_Myhead)
; _Parent(_Myhead)
返回(_Nodepref)(*_Myhead)._Parent
,由于_Myhead
为空而失败。
如何初始化地图,使其头部非空,并且可以插入东西而不会崩溃?道歉,如果我已经解释了这一点 - 我是C++的新手。
你可以发布你调用插入的代码吗?也是之前的路线? – 2009-07-27 13:35:16
从您的代码中,地图未声明为静态。 – 2009-07-27 13:36:57
@尼尔:好点。它是在原来的 - 修复。 – Simon 2009-07-27 13:41:03