3

我正在尝试使用以下代码将从 QRegularExpression 返回的匹配列表返回到 QList:

QList<QString> list();
QString str ("something by the way");
QRegularExpression reA("pattern");
QRegularExpressionMatchIterator i = reA.globalMatch(str);

while (i.hasNext()) {
    QRegularExpressionMatch match = i.next();
    if (match.hasMatch()) {
        list.append(match.captured(0));
    }
}

return list;

...但它向我显示了这个错误:

/home/path/.../file:line# error: request for member 'append' in 'list', which is of non-class type 'QList<QString>()'
         list.append(match.captured(0));

/home/path/.../file:line#: error: could not convert 'list' from 'QList<QString> (*)()' to 'QList<QString>'
 return list;

我怎样才能让它工作,我尝试过多种类型。

4

2 回答 2

5

请尝试以下代码:

QList<QString> list;
QString str ("something by the way");
QRegularExpression reA("pattern");
QRegularExpressionMatchIterator i = reA.globalMatch(str);

while (i.hasNext()) {
    QRegularExpressionMatch match = i.next();
    if (match.hasMatch()) {
        list.append(match.captured(0));
    }
}

return list;

因为可以重载运算符,例如()在 c++ 中,所以编译器很难区分没有参数的构造函数和括号运算符。因此,如果您想调用没有任何参数的构造函数,请不要放括号Qlist<QString> myList;

只能在使用New运算符时加上括号QList<QString> *myList = new QList<QString>()

括号运算符用于在 C++ 中创建可调用对象,如果您想了解更多信息,可以查看此链接

于 2018-05-29T14:27:56.597 回答
3
QList<QString> list();

它实际上是一个函数。对于变量,您必须省略括号;但这很令人困惑,因为您通常使用括号将参数传递给构造函数。

它应该是:

QList<QString> list;
// or
QList<QString> list{};
于 2018-05-29T14:14:49.960 回答