并发映射错误c2440

QtConcurrent map error c2440

本文关键字:c2440 错误 映射 并发      更新时间:2023-10-16

我正在制作一个识别图像中的车牌的应用程序。它工作得很好,但现在我想将代码的图像分析部分移动到一个单独的线程。我使用Qt 5.4。在阅读了文档之后,我决定使用QtConcurrent::map是正确的,因为在处理图像之前,用户加载存储在列表中的文件(只有它们的名称)。下面是一些代码:

应该在线程中运行的函数的定义:

results detectPlates(const QString &file);
尝试使用多线程:
QFuture<results> r = QtConcurrent::map(files, &MainWindow::detectPlates)

files定义为QList<QString>results是在我使用的库中定义的类型,如果这很重要。

这不会编译错误:

C2440 'initializing' cannot convert from `QFuture<void>` to `QFuture<results>`

当我将函数修改为<void>时,我得到:

error c2064: term does not evaluate to a function taking 1 argument.

有什么问题吗?

QtConcurrent::map修改项目,并返回一个空的未来。如果希望以QFuture<T>的形式返回结果,则需要使用QtConcurrent::mapped

相关文章: