在集合c ++中使用枚举时出现问题

时间:2014-03-11 23:29:13

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

我将所有的枚举放入一套。我试图遍历集合并使用switch语句来给出变量值(尚未完成)。我无法设置迭代器来放入switch语句,告诉我我正在使用哪个枚举。这是我的代码。 *它给我一个空值。

    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;
};

1 个答案:

答案 0 :(得分:1)

您的容器应该是:

std::set< CreateAndUseIniFile::iniFileValues>

和迭代器

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

它将按预期工作。

注意:切换可能会被优化,因此在您为切换案例添加更多内容之前,您将无法进入,例如:

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;
        }
        //...
    }
}