我有我的代码:
for(QHash<long,float>::iterator i=list.begin();i!=list.end();++i)
{
long id = QVariant((*i).key()).toLongLong();
float ile = QVariant((*i).value()).toFloat();
}
我变成了这个错误:
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()
转换为float
和int
?
答案 0 :(得分:2)
成员方法key
和value
是迭代器接口的一部分
因此,使用i.key()
代替(*i).key()
就足够了
这同样适用于values
,您应使用i.value()
代替(*i).value()
迭代器的operator*
返回对 i-th 值的引用,在您的情况下返回到没有成员方法float
和{{key
的{{1}} 1}}确实。
作业应类似于以下内容:
value
有关详细信息,请参阅here。
答案 1 :(得分:1)
key()
和value()
是迭代器的方法,因此您可以像这样访问它们:
long id = QVariant(i.key()).toLongLong();
float ile = QVariant(i.value()).toFloat();
*i
与i.value()
相同,因此您也可以为该值撰写QVariant(*i)
。
你得到的错误,因为错误的行与此相同:long id = QVariant(i.value().key()).toLongLong();
,显然float
值是错误中所说的非类,所以它可以& #39; t key()
方法(或任何其他成员)。
最后,无论如何,通过QVariant
完全没必要(至少在这种情况下),所以你可以这样做:
long id = i.key();
float ile = *i;