【问题标题】:Unable to read out config file while iterating迭代时无法读取配置文件
【发布时间】:2019-05-27 11:29:40
【问题描述】:

我在尝试读取配置文件时无法访问迭代器。我的代码是:

void requestPLC::write(QMap <QString, QVariant> map)
{

QMap<QString, QVariant>::iterator i;

for (i = map.begin(); i != map.end(); ++i)
    {
        mConfig->reqPLC->datatype.value(map[i]);
        // do something here
    }
}

我想要做的是遍历我的地图并从配置文件中选择相应的值。我的错误如下所示:

'operator[]' 不匹配(操作数类型是'QMap' 和“QMap::iterator”) mConfig->reqPLC->datatype.value(map[i]); ^

我知道这是由于 datatype.value(map[i]) 是一个迭代器造成的,但我无法找到避免这种情况的方法。我需要在这里转换我的迭代器吗?

【问题讨论】:

  • 尝试i.value() 获取值,或i.key() 获取密钥
  • 您需要给出迭代器的值,而不是迭代器本身。在 stl 中,我会 i->first 让迭代器映射,以便访问密钥。

标签: c++ qt qmap


【解决方案1】:

使用迭代器访问QMapkey, value 可以通过iterator class

在你的情况下:

void requestPLC::write(QMap <QString, QVariant> map)
{

    QMap<QString, QVariant>::iterator i;

    for (i = map.begin(); i != map.end(); ++i)
    {
        auto map_value = i.value();
        mConfig->reqPLC->datatype.value(map_value);
        // do something here
    }
}

【讨论】:

    【解决方案2】:

    您需要从迭代器中提供密钥,而不是迭代器本身。在 STL 中,我会 i->first 为迭代器进行映射,以便访问密钥,然后我使用密钥使用 [] 运算符访问映射。

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      相关资源
      最近更新 更多