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
相关产品推荐
相关产品推荐

