首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QHash迭代器

Qt QHash迭代器
EN

Stack Overflow用户
提问于 2016-01-25 06:52:38
回答 2查看 3.8K关注 0票数 1

我有我的密码:

代码语言:javascript
复制
for(QHash<long,float>::iterator i=list.begin();i!=list.end();++i)
{
    long id = QVariant((*i).key()).toLongLong();
    float ile = QVariant((*i).value()).toFloat();
}

我变成了这样的错误:

代码语言:javascript
复制
request for member 'key' in 'i.QHash<K,V>::iterator::operator*<long int, float>()', which is of non-class type 'float'    
             long id = QVariant((*i).key()).toLongLong();

如何将key()value()转换为my floatint

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-25 07:01:58

成员方法keyvalue是迭代器接口的一部分。

正因为如此,使用i.key()而不是(*i).key()就足够了。

values也是如此,对于它,您应该使用i.value()而不是(*i).value()

迭代器的operator*返回对i-th值的引用,在您的例子中,返回一个没有成员方法keyvaluefloat

这些作业应类似于下列作业:

代码语言:javascript
复制
long id = i.key();
float ile = i.value();

有关更多细节,请参见这里

票数 2
EN

Stack Overflow用户

发布于 2016-01-25 07:02:09

key()value()是迭代器的方法,所以您可以这样访问它们:

代码语言:javascript
复制
    long id = QVariant(i.key()).toLongLong();
    float ile = QVariant(i.value()).toFloat();

*ii.value()相同,因此您也可以为值编写QVariant(*i)

您将得到所得到的错误,因为错误的行与以下内容相同:long id = QVariant(i.value().key()).toLongLong();,而且很明显,float值是错误中所说的非类,所以它不能有key()方法(或任何其他成员)。

最后,通过QVariant是完全没有必要的(至少在本例中是这样),所以您可以这样做:

代码语言:javascript
复制
    long id = i.key();
    float ile = *i;

参考文件:http://doc.qt.io/qt-5/qhash-iterator.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34986662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档