枚举值在c ++中是相同的

时间:2013-01-16 08:09:43

标签: c++ enums

我班上有这个enum声明:

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

3 个答案:

答案 0 :(得分:5)

std::map<LPCTSTR, long>是垃圾。 LPCTSTRchar*(或wchar_t*)的typedef,这意味着地图会根据指针的值比较键,而不是存储在它。你可能意味着std::map<std::basic_string<TCHAR>, METHODS>。不要在C ++中使用C数据结构。

答案 1 :(得分:1)

所以你的地图会返回一个未初始化的值..它与枚举无关。

答案 2 :(得分:1)

正如Angew指出的那样,你可能意味着:std::map<std::basic_string<TCHAR>, METHODS>.,你最好不要在这里使用C风格的字符串。但是如果你确定sMethodName恰好是你用来构建地图的指针中的一个,你还需要测试find是否真的找到了它(不要返回.end())而只是使用{{ 1}}。