带有QList<QString>函数“append”的QT应用程序

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;

如何让它工作,我尝试过将其转换为多种类型。


你把“list”声明为某个函数了吗?我认为你没有这个意思。请参考:https://doc.qt.io/qt-5/qlist.html#append(你也应该总是显示出你已采取哪些步骤来解决这样的问题。例如,我期望一个IDE可以指出给您。) - user1531971
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++中创建可调用对象。如果您想了解更多信息,可以查看此链接

3
QList<QString> list();

这实际上是一个函数。对于变量,您必须省略括号;但这很容易引起混淆,因为通常使用括号向构造函数传递参数。

正确写法应该是:

QList<QString> list;
// or
QList<QString> list{};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接