Qt 6 QPromise调用finish()触发编译错误,请求技术帮助
QPromise::finish()编译错误的原因与解决办法
错误原因
- Lambda表达式默认是const属性的函数,捕获的变量
p会被视为const QPromise<QByteArray>类型 QPromise::finish()是非const成员函数,无法通过const对象调用,因此触发C2662类型转换错误
解决办法
给lambda添加mutable修饰符,解除其const限制,让捕获的p可以被修改:
QPromise<QByteArray> promise; QFuture<QByteArray> future = promise.future(); promise.start(); qDebug() << "Pre timer"; QTimer::singleShot(2000, this, [p = std::move(promise)]() mutable { qDebug() << "Timer triggered"; p.finish(); // 现在可正常编译调用 });
补充说明
Qt官方博客的示例大概率是省略了mutable这个细节,并非核心逻辑错误——因为lambda要修改捕获的移动构造对象,必须显式声明mutable才能突破默认的const限制。
内容的提问来源于stack exchange,提问作者Hyndrix
相关产品推荐
相关产品推荐

