Qt 在 QVariant 处抛出非法错误
Qt Throwing Illegal Error at QVariant
我有一些代码旨在从一组数据中获取 QMap 的 QList。然后它应该遍历该列表中的所有 QMap。出于某种原因,在尝试此操作时,我遇到了一些关于用于存储数据的 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.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()
returns QMaps/data 的正确集合。
恕我直言,问题是模板中的 ,
。可悲的是 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
循环。
我有一些代码旨在从一组数据中获取 QMap 的 QList。然后它应该遍历该列表中的所有 QMap。出于某种原因,在尝试此操作时,我遇到了一些关于用于存储数据的 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.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()
returns QMaps/data 的正确集合。
恕我直言,问题是模板中的 ,
。可悲的是 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
循环。