【问题标题】:Trouble using enum in a set c++在一组 c++ 中使用枚举时遇到问题
【发布时间】:2014-03-11 23:29:13
【问题描述】:

我将所有枚举放入一个集合中。我正在尝试遍历集合并使用 switch 语句来给变量值(还没有这样做)。我无法设置一个迭代器来放入 switch 语句,它会告诉我我正在使用哪个枚举。这是我的代码。 *it 给了我一个空值。

    for(std::set<CreateAndUseIniFile::iniFileValues>::iterator it=m_modules.begin(); it!=m_modules.end(); ++it)
{
    switch(*it)
    {
    case CreateAndUseIniFile::VOLTAGE1_OFFSET:
        break;
    case CreateAndUseIniFile::VOLTAGE12_OFFSET:
        break;
    case CreateAndUseIniFile::VOLTAGE123_OFFSET:
        break;
     }
}

这是我添加到集合中的代码

    m_modules.insert(CreateAndUseIniFile::VOLTAGE1_OFFSET);
m_modules.insert(CreateAndUseIniFile::VOLTAGE12_OFFSET);
m_modules.insert(CreateAndUseIniFile::VOLTAGE123_OFFSET);

这里是枚举

class CreateAndUseIniFile {
 public:

enum iniFileValues
{
    VOLTAGE1_OFFSET,
    VOLTAGE12_OFFSET,
    VOLTAGE123_OFFSET
    }
  std::set<CreateAndUseIniFile::iniFileValues> m_modules;
};

【问题讨论】:

  • 在 C++11 中,你更喜欢在你的类中使用枚举类而不是这个枚举。

标签: c++ stl enums set switch-statement


【解决方案1】:

你的容器应该是:

std::set< CreateAndUseIniFile::iniFileValues>

和迭代器

std::set< CreateAndUseIniFile::iniFileValues>::iterator it;

它会按预期工作。

注意:switch 可能已经过优化,所以在你添加更多东西到 switch 案例之前,你将无法进入,例如:

for ( std::set< CreateAndUseIniFile::iniFileValues>::iterator it = s.begin(); 
                                               it != s.end(); ++it) {
    switch (*it) {
        case CreateAndUseIniFile::VOLTAGE1_OFFSET:
        {
            int iu = 100;
            break;
        }
        case CreateAndUseIniFile::VOLTAGE12_OFFSET:
        {
            int u = 1000;
            break;
        }
        //...
    }
}

【讨论】:

  • 我做了这些改变,但我仍然没有得到任何价值
  • @Aaron 添加一些东西来切换案例
  • 谢谢,枚举对我来说有点棘手,但是当我必须在 6 个月后重新编写代码时,更改起来要容易得多。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2021-11-17
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 2017-01-04
相关资源
最近更新 更多