我有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上循环吗?
为什么不使用
for (QHash<QString, QHash<quint64, QElapsedTimer*>::iterator it = myNestedQHash.begin(); it != myNestedQHash.end(); ++it)
{...}
相反?我认为Q_FOREACH
会创建一个副本,所以它的性能也会更好。。。
/编辑:
foreach只是Q_foreach宏的定义。。。所以编译器看到它,它将接受2个值。由于其中有一个额外的逗号,它将看到3个参数。你可以在这里找到所有信息。
应该这样工作:
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"];
}
QT foreach
是一个宏。宏中的参数用逗号,
分隔
在您的案例中,您使用了一个内部带有逗号的模板。
你可以把它写成:
QHash<quint64, QElapsedTimer*> stat;
foreach (stat, myNestedQHash.values(someStr))