2016-10-06 34 views
1

백그라운드에서 실행하고 싶은 재귀 적 디렉터리 복사 기능이 있습니다. 이 함수는 두 개의 QString 인수 filepath와 dir을 취합니다. .PRO에서QTConcurrent가 컴파일되지 않습니다.

: 코드에서

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); 
          ^~~~~~~~~~ 

내가 뭘 잘못하고 있니?

+1

오류 아래에 다른 줄이 있습니까? 예 : "참고 : 후보자는 다음과 같습니다."등등? –

+0

예. 꽤 많은 수. – jocala

+0

편집 후, 당신은'QtConcurrent :: run'을 사용하여 다른 멤버 함수를 호출하려고하는 것 같습니다. 제 대답을보십시오. – Mike

답변

3

I get the following compile error:

error: no matching function for call to 'run' 
QFuture <void> future = QtConcurrent::run(copyFolder(filepath,dir)); 
        ^~~~~~~~~~~~~~~~~ 

당신이하고있는 방식대로 인수를 전달해서는 안됩니다. 대신 함수의 인수를 QtConcurrent::run에 대한 인수로 전달해야합니다 (docs here 참조). 기본 QThreadPool에서 스레드에서 함수 호출을하면 통과 한 인수를 복사 수행

QFuture <void> future = QtConcurrent::run(copyFolder, filepath, dir); 

이 방법 QtConcurrent :

귀하의 전화는 다음과 같이 보일 것입니다. 당신이 당신의 클래스의 비 정적 멤버 함수를 호출해야하는 경우

If I call the function like this:

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); 
           ^~~~~~~~~~ 

, 당신은, 당신이 기능을 실행하려는 개체를 전달할 수있는 문서 here를 참조하십시오. (그렇지 않으면 다른 오류를 얻을 것 때문에)는,이 같은해야 클래스의 다른 멤버 함수에서 QtConcurrent::run를 사용하는 가정 :

QFuture <void> future = QtConcurrent::run(this, &ClassName::copyFolder, filepath, dir); 

참고을, 당신은 확실히 그 것을 확인해야 공유 데이터에 대한 모든 액세스 (두 스레드 간)는 직렬화해야합니다 (아마도 QMutex을 사용하여).

+0

으로 수정되었습니다. 이 기술을 사용하여 다른 오류가 발생합니다. – jocala

+0

@jocala, 그에 따라 대답을 편집했습니다. – Mike

+0

감사합니다! 내 컴파일 오류가 사라졌습니다. – jocala