我有QHash<QString, QHash<quint64, QElapsedTimer*> myNestedQHash;
,当我尝试
foreach (QHash<quint64, QElapsedTimer*> stat, myNestedQHash.values(someStr))
我得到了
error: macro "Q_FOREACH" passed 3 arguments, but takes just 2
是不是可以按照我的方式循环嵌套的QHash?
答案 0 :(得分:3)
为什么不使用
for (QHash<QString, QHash<quint64, QElapsedTimer*>::iterator it = myNestedQHash.begin(); it != myNestedQHash.end(); ++it)
{...}
代替?我认为Q_FOREACH
会创建一个副本,所以它的表现也会更好......
/编辑:
foreach只是Q_FOREACH宏的定义...所以编译器看到它并且它将接受2个值。因为你有一个额外的逗号,它将看到3个参数。你会找到所有的信息here。
答案 1 :(得分:0)
应该像这样工作:
QHash<QString, int> myHash0;
myHash0["test0"]=0;
myHash0["test1"]=1;
QHash<QString, int> myHash1;
myHash1["test0"]=0;
myHash1["test1"]=1;
QHash<QString, QHash<QString, int> > myHashList;
myHashList["Hash0"] = myHash0;
myHashList["Hash1"] = myHash1;
QHash<QString, int> h;
foreach(h , myHashList)
{
qDebug()<<h["test0"];
}
答案 2 :(得分:0)
QT foreach
是一个宏。宏中的参数由逗号,
在您的情况下,您使用带有逗号的模板。
你可以把它写成:
QHash<quint64, QElapsedTimer*> stat;
foreach (stat, myNestedQHash.values(someStr))