我有一个递归目录复制函数,我想在后台运行。函数接受两个QString参数,filepath和dir。
来自.pro:
QT += core gui sql network concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += -lQt5Concurrent来自代码:
#include <QtConcurrent/QtConcurrent>
#include <qtconcurrentrun.h>
#include <QThread>
...
QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir));我得到以下编译错误:
error: no matching function for call to 'run'
QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir) );
^~~~~~~~~~~~~~~~~如果我这样调用这个函数:
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir );
error: reference to non-static member function must be called
QFuture <void> future = QtConcurrent::run(copyFolder, filepath,dir );
^~~~~~~~~~我做错了什么?
发布于 2016-10-06 21:25:27
我得到以下编译错误: 错误:对于调用“run”QFuture call = QtConcurrent::run(copyFolder(filepath,dir) )没有匹配函数;^
你不应该以你现在的方式传递论点。相反,您应该将函数的参数作为参数传递给QtConcurrent::run,请参阅docs 这里。
你的电话应该是这样的:
QFuture <void> future = QtConcurrent::run(copyFolder, filepath, dir);这样,QtConcurrent将复制您传递的参数,并在线程中从默认的QThreadPool执行函数调用。
如果我这样调用这个函数: QFuture未来= QtConcurrent::run(copyFolder,filepath,dir );错误:对非静态成员函数的引用必须被称为QFuture未来= QtConcurrent::run(copyFolder,filepath,dir );^~
如果必须在类中调用非静态成员函数,则必须传递要在其上运行的对象,请参阅docs 这里。假设您使用的是来自类中另一个成员函数的QtConcurrent::run (如果不是,您将得到一个不同的错误),您应该这样做:
QFuture <void> future = QtConcurrent::run(this, &ClassName::copyFolder, filepath, dir);注意到,您必须确保对共享数据的所有访问(在两个线程之间)都应该序列化(可能使用QMutex)。
https://stackoverflow.com/questions/39905638
复制相似问题