2013-01-16 178 views
-4

我有我的類此枚舉聲明相同:枚舉值在C++

const enum METHODS{ 

    Write, 
    Save, 
    Update, 
    Delete 

}; 

但是,當我取回我的枚舉值;對於所有方法,我得到了這個值-842150451

它應該是0,1,2,3對不對?

請幫我解決這個問題。

我把我的枚舉值到map<LPCTSTR, long> m_methodMap

m_methodMap[_T("Save")] = Save; same with other methods

我找回這樣說:

cout << "Values " << m_methodMap.find(sMethodName)->second; // where sMethodName is the methods

+10

你可以顯示代碼「檢索值?」你顯示的數字(很可能)是一個未初始化的「int」。 – Angew

+2

我建議你總是將第一個枚舉初始化爲零,所以'write = 0'。你不需要爲別人。 – Arthur

+0

這是我如何檢索它.. – user1670340

回答

1

讓你的地圖會返回一個未初始化值..其不相關枚舉。

+0

嗨你的權利是不是枚舉它的我的地圖...謝謝 – user1670340

5

std::map<LPCTSTR, long>是垃圾。 LPCTSTRchar*(或wchar_t*)的類型定義,這意味着該映射會根據指針的值而不是存儲在其中的字符串比較鍵。你可能意思是std::map<std::basic_string<TCHAR>, METHODS>。不要在C++中使用C數據結構。

+0

這將是一個學習經驗,不要在C++中使用C數據結構作爲我在C++中的菜鳥。謝謝。 – user1670340

1

正如Angew指出的,你的意思可能是:std::map<std::basic_string<TCHAR>, METHODS>.,你最好不要在這裏使用C風格的字符串。但是,如果您確定sMethodName確切地保存了您用來構建地圖的指針之一,那麼您仍然需要測試是否可以找到它(不返回.end()),並且只能使用->second

+0

我用find來測試它並返回值。但是,當我分析我的代碼覆蓋代碼後,因爲我正在對它進行單元測試......我得到了未初始化的值。 – user1670340

+0

真正的罪魁禍首是我的地圖:( – user1670340

+0

修復正在改變LPCTSTR CString ....感謝球員的幫助。 – user1670340