【问题标题】:Enums values are the same in c++ [closed]C ++中的枚举值相同[关闭]
【发布时间】:2013-01-16 08:09:42
【问题描述】:

我的班级中有这个枚举声明:

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

【问题讨论】:

  • 你能显示“检索值”的代码吗?您显示的数字(很可能)是未初始化的int
  • 我建议你总是将第一个枚举初始化为零,所以write = 0。别人不需要你。
  • @Angew 为什么在enum 前面使用const
  • @jules 如果没有为任何枚举器指定初始化器,则第一个枚举器自动初始化为0
  • @user1670340 你能发布你用来检索值的代码吗?

标签: c++ enums


【解决方案1】:

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

【讨论】:

  • 这将是一个学习经验,不要在c++中使用C数据结构作为我在c++中的菜鸟。谢谢。
【解决方案2】:

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

【讨论】:

  • 嗨,你的权利不是枚举它我的地图...谢谢
【解决方案3】:

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

【讨论】:

  • 我用 find 对其进行了测试,它返回了值。但是,当我对我的代码进行代码覆盖时,因为我正在对其进行单元测试......我得到了未初始化的值。
  • 真正的罪魁祸首是我的地图:(
  • 修复将 LPCTSTR 更改为 CString....谢谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2014-09-10
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多