具有 QList<QString> 函数 "append" 的 QT 应用程序

QT application with QList<QString> function "append"

我正在尝试 return 从 QRegularExpression 到 QList 的匹配列表 return,代码如下:

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;

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

QList<QString> list();

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

应该是:

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

请尝试以下代码:

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++中用于创建可调用对象,如果你想了解更多可以看看这个link