Qt在QVariant上投掷非法错误

时间:2017-05-11 19:31:33

标签: c++ qt qvariant

我有一些代码用于从一组数据中获取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 /数据集。

1 个答案:

答案 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循环。