You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QList<QString>调用append报错,如何修复正则匹配存列表问题?

解决QRegularExpression匹配结果存入QList的报错问题

你碰到的这个错误是C++里出了名的语法陷阱——你把QList对象的声明写成了函数声明!

先看你代码的第一行:

QList<QString> list();

在C++编译器眼里,这不是创建一个QList<QString>的实例,而是声明了一个名叫list、返回QList<QString>类型的无参函数。这就难怪后面调用list.append()时,编译器会报错说你在给函数名调用成员方法,最后return的时候也没法把函数类型转换成QList对象。

最简单的修正方法

把第一行的括号去掉就行,直接声明对象:

QList<QString> list;

如果你习惯用C++11及以后的语法,也可以用列表初始化的写法,效果一样:

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;

额外优化小提示

其实QRegularExpressionMatchIterator的next()方法,只有在hasNext()为true时才会被调用,返回的匹配结果肯定是有效的,所以你可以把里面的if (match.hasMatch())判断去掉,简化代码:

QList<QString> list;
const QString str = "something by the way";
const QRegularExpression reA("pattern");
QRegularExpressionMatchIterator matches = reA.globalMatch(str);
while (matches.hasNext()) {
    list.append(matches.next().captured(0));
}
return list;

内容的提问来源于stack exchange,提问作者Jorge Luis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:56:24