我已經創建了一個消息窗口類,並且我試圖將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