1

我有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 吗?

4

3 回答 3

3

为什么不使用

for (QHash<QString, QHash<quint64, QElapsedTimer*>::iterator it = myNestedQHash.begin(); it != myNestedQHash.end(); ++it) 
{...}

反而?我认为Q_FOREACH会创建一个副本,因此性能也会更好...

/编辑:

foreach 只是 Q_FOREACH 宏的定义......所以编译器看到它并且它将接受 2 个值。因为你有一个额外的逗号,它会看到 3 个参数。你会在这里找到所有信息。

于 2013-07-08T16:19:40.530 回答
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"];
}
于 2013-07-08T10:50:15.110 回答
0

QTforeach是一个宏。并且宏中的参数用逗号分隔,

在您的情况下,您使用带有逗号的模板。

你可以把它写成:

QHash<quint64, QElapsedTimer*>  stat;  
foreach (stat, myNestedQHash.values(someStr))
于 2016-02-01T14:59:45.773 回答