Qt const QHash遍历 error: C2679: 二进制“=”: 没有找到接受

  • A+
所属分类:Qt专栏 Qt经验集

Qt const QHash遍历 error: C2679: 二进制“=”: 没有找到接受

报错

error: C2679: 二进制“=”: 没有找到接受“QHash<QString,QString>::const_iterator”类型的右操作数的运算符(或没有可接受的转换) D:\Qt5.6.2\5.6\msvc2013\include\QtCore/qhash.h(350): 可能是“QHash<QString,QString>::iterator &QHash<QString,QString>::iterator::operator =(const QHash<QString,QString>::iterator &)” 尝试匹配参数列表“(QHash<QString,QString>::iterator, QHash<QString,QString>::const_iterator)”时

原因分析

QHash<QString, QString>::iterator it;可以用于遍历和修改操作

QHash<QString, QString>::const_iterator it;所指元素是一个常量,可用于遍历,不可用于修改所指元素

函数的形参为const QHash<QString,QString> hash,是不允许对hash进行修改的,所以在对hash进行遍历时,需要选择const_iterator

解决方案

遍历qhash的函数

  1. void bianli(const QHash<QString,QString> hash)
  2. {
  3.     QHash<QString, QString>::const_iterator it;
  4.     for( it=hash.constBegin(); it!=hash.constEnd(); ++it)
  5.     {
  6.         qDebug() << it.key() <<"        " << it.value();
  7.     }
  8. }

调用

  1. QHash<QString, QString> map;
  2. map.insert("beijing""111");
  3. map.insert("shanghai""021");
  4. map.insert("tianjin""022");
  5. map.insert("chongqing""023");
  6. map.insert("jinan""0531");
  7. map.insert("wuhan""027");
  8. bianli(map);

 

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!