-5

我在课堂上有这个枚举声明:

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

4

3 回答 3

5

std::map<LPCTSTR, long>是垃圾。LPCTSTR是一个 typedef to char*(or wchar_t*),这意味着映射根据指针的值来比较键,而不是存储在其中的字符串。你可能的意思是std::map<std::basic_string<TCHAR>, METHODS>。不要在 C++ 中使用 C 数据结构。

于 2013-01-16T08:29:56.440 回答
1

正如 Angew 指出的那样,您可能的意思是:std::map<std::basic_string<TCHAR>, METHODS>.您最好不要在这里使用 C 风格的字符串。但是,如果您确定 sMethodName 可能恰好包含您用于构建地图的指针之一,您仍然需要测试是否真的找到find了它(不要返回.end())并且只需要使用->second

于 2013-01-16T08:49:18.337 回答
1

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

于 2013-01-16T08:24:57.510 回答