2016-10-06 16 views
1

バックグラウンドで実行したい再帰的なディレクトリコピー機能があります。この関数は、filepathとdirの2つのQString引数を取ります。 .PROからQTConcurrentがコンパイルされない

QT += core gui sql network concurrent 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 
LIBS += -lQt5Concurrent 

コードから:

:私はこのような関数を呼び出す場合

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

#include <QtConcurrent/QtConcurrent> 
#include <qtconcurrentrun.h> 
#include <QThread> 
... 

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に渡す必要があります。ドキュメントhereを参照してください。

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

この方法QtConcurrentあなたが合格した引数をコピーして、デフォルトQThreadPoolからのスレッドで関数呼び出しを実行します。

あなたの呼び出しは次のようになります。あなたのクラスの非静的メンバ関数を呼び出す必要がある場合

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を参照してください、あなたは上の関数を実行するオブジェクトを渡す必要があります。が、あなたは必ずそのことを確認する必要があること

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

注:(ない場合は、別のエラーが出るであろうから)、あなたのクラスの別のメンバー関数からQtConcurrent::runを使用していると仮定すると、あなたはこのような何かを行う必要があります共有データへのすべてのアクセス(両方のスレッド間)はシリアル化する必要があります(おそらくQMutexを使用)。

+0

私は質問を編集しました。私はこの技術を使用して別のエラーを取得します。 – jocala

+0

@jocala、私はそれに応じて私の答えを編集しました。 – Mike

+0

ありがとう!私のコンパイルエラーはなくなりました。 – jocala

関連する問題