我创建了一个仅用于消息的窗口类,并尝试将HWND映射回具有这些句柄的对象。我正在尝试使用该类私有静态std :: map <HWND,CMyClass *&gt; 来完成此操作,如下所示:
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 ++的新手。