цикл через вложенный QHash с foreach

я имею 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 они так, как я сделал?

1

Решение

почему бы не использовать

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

вместо? Я думаю Q_FOREACH создаст копию, так что будет и лучшая производительность …

/редактировать:

foreach — это просто определение макроса Q_FOREACH … так что компилятор видит его и принимает 2 значения. поскольку у вас есть дополнительная запятая, он увидит 3 аргумента. вы найдете всю информацию Вот.

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"];
}
0

QT foreach это макрос. А параметры в макросе разделяются запятой ,

В вашем случае вы используете шаблон с запятой внутри.

Вы можете написать это как:

QHash<quint64, QElapsedTimer*>  stat;
foreach (stat, myNestedQHash.values(someStr))
0
По вопросам рекламы [email protected]