我有一些代码用于从一组数据中获取QMaps的QList。然后它应该通过该列表中的所有QMaps。出于某种原因,在尝试这个时,我得到一些关于用于存储数据的QVector的错误。这是我的代码:
#include <QCoreApplication>
#include <QMap>
#include <QVariant>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QMap<QString, QVariant>> maps;
QMap<QString, QVariant> item1;
item1.insert("Item 1", QVariant::fromValue(1));
maps.append(item1);
foreach (const QMap<QString, QVariant> & map, maps)
{
qDebug() << map;
}
return a.exec();
}
错误:
..\ErrorTest\main.cpp(17): warning C4002: too many actual parameters for macro 'Q_FOREACH'
..\ErrorTest\main.cpp(17): error C2275: 'QVariant': illegal use of this type as an expression
C:\Qt\5.8\msvc2015_64\include\QtCore/qsharedpointer_impl.h(94): note: see declaration of 'QVariant'
..\ErrorTest\main.cpp(17): error C2955: 'std::remove_reference': use of class template requires template argument list
D:\Microsoft Visual Studio 14.0\VC\INCLUDE\xtr1common(301): note: see declaration of 'std::remove_reference'
..\ErrorTest\main.cpp(17): error C2065: 'map': undeclared identifier
..\ErrorTest\main.cpp(17): error C2143: syntax error: missing ')' before '>'
..\ErrorTest\main.cpp(17): error C2059: syntax error: '>'
..\ErrorTest\main.cpp(17): error C2065: '_container_': undeclared identifier
..\ErrorTest\main.cpp(17): error C2228: left of '.control' must have class/struct/union
..\ErrorTest\main.cpp(17): note: type is 'unknown-type'
..\ErrorTest\main.cpp(17): error C2228: left of '.i' must have class/struct/union
..\ErrorTest\main.cpp(17): note: type is 'unknown-type'
..\ErrorTest\main.cpp(17): error C2228: left of '.e' must have class/struct/union
..\ErrorTest\main.cpp(17): note: type is 'unknown-type'
..\ErrorTest\main.cpp(17): error C2059: syntax error: ')'
..\ErrorTest\main.cpp(17): error C2143: syntax error: missing ';' before 'for'
..\ErrorTest\main.cpp(17): error C2059: syntax error: '='
..\ErrorTest\main.cpp(17): error C2143: syntax error: missing ';' before '}'
..\ErrorTest\main.cpp(17): fatal error C1004: unexpected end-of-file found
谢谢,是的,tagData->toMappedList()
会返回正确的QMaps /数据集。
答案 0 :(得分:1)
Imho问题是模板中的,
。可悲的是,foreach
只不过是对Q_FOREACH
的呼唤,这是一个宏。它需要以逗号分隔的参数。但由于模板,你有2个逗号。我不久前遇到了这个问题,虽然Qt Creator至少为我提供了error: macro "Q_FOREACH" passed 3 arguments, but takes just 2
而不是你得到的大量错误。在你的情况下,这将是:
..\ErrorTest\main.cpp(17): warning C4002: too many actual parameters for macro 'Q_FOREACH'
我建议使用迭代器的for
循环来遍历地图列表。除非你想转储const
,否则你可以这样做:
QMap<QString, QVariant> map;
foreach (map, maps) {
...
}
你也可以再次使用auto
- 没有恒定。
如果常量是一个关键方面,请使用常量迭代器来转换for
循环。