2017-08-15 14 views
0

を呼び出す:mappedReducedを、それは、このコードで4つのエラーが発生してドキュメントdescription.I'mのシンプルさではなかった。のQt - 私はQtConcurrent使用しようとしていたmappedReduced

私はQtの5.9を使用しています。 MSVC-2015を有する1

//....................... 
QMap<QString,QString> TesseractAPI::analyze(QStringList singleData); 

void joinMaps(QMap<QString,QString> map, const QMap<QString,QString> partial); 
//............. 
QMap<QString, QString> TesseractAPI::analyzeAll(QList<QStringList> data){ 

    /*QFuture< QMap<QString,QString> > res*/; 
    QFuture< QMap<QString,QString> > res = QtConcurrent::mappedReduced(data, TesseractAPI::analyze, joinMaps); // I tried adding '&' before the functors 
    res.waitForFinished(); 
    qDebug()<<res.result(); 
    return res.result(); 

} 

コンパイラエラー:

C2780: 'QFuture<QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> QtConcurrent::mappedReduced(Iterator,Iterator,MapFunctor,ReduceFunctor,QtConcurrent::ReduceOptions)': expects 5 arguments - 3 provided 

C2780: 'QFuture<T> QtConcurrent::mappedReduced(Iterator,Iterator,MapFunctor,ReduceFunctor,QtConcurrent::ReduceOptions)': expects 5 arguments - 3 provided 

C2780: 'QFuture<T> QtConcurrent::mappedReduced(Iterator,Iterator,MapFunctor,ReduceFunctor,QtConcurrent::ReduceOptions)': expects 5 arguments - 3 provided 

C2783: 'QFuture<T> QtConcurrent::mappedReduced(const Sequence &,MapFunctor,ReduceFunctor,QtConcurrent::ReduceOptions)': could not deduce template argument for 'ResultType' 

Iは、データ型を変更しようとしたが、私はまた、目の例に従っe罰金をコンパイルする文書ですが、問題がどこに残っているのかわかりませんでした。

答えて

1

あなたはたくさんの&が見つかりません。 まず、あなたがコピーしない、constの参照を経由してanalyzeAll()にデータを渡す必要があります。

QMap<QString, QString> TesseractAPI::analyzeAll(const QList<QStringList>& data){ 

次に、あなたはコピーしない、constの参照を経由してマッピング機能にアイテムを渡す必要があります。それは、クラスのメンバ関数なので、それはまた、静的である必要があり、そうでない場合は、あなたがそれを呼び出すためにどのオブジェクトを知っている必要がありますが、そのようなmappedReduced()過負荷ありません:

static QMap<QString,QString> TesseractAPI::analyze(const QStringList& singleData); 

次に、reduce関数のニーズの最初のパラメータは、参照する必要があります。それ以外の場合は、ローカルコピーを変更することになりますが、これは役に立たないでしょう。あなたが減らすものは、不要なコピーを避けるために、const refを介して渡す必要があります:

void joinMaps(QMap<QString,QString>& map, const QMap<QString,QString>& partial); 

これで動作するはずです。それが明示的に関数ポインタに&を追加することもうれしいですので、彼らが何であるか混乱はありません、あなたの意思を述べるのために:

QFuture< QMap<QString,QString> > res = QtConcurrent::mappedReduced(data, &TesseractAPI::analyze, &joinMaps); 
+0

私はそれがプライベートメンバ変数にアクセスする必要があるため、静的に「分析」にすることはできません – pourjour

+1

メンバへのポインタは、コンテナ要素クラス、この場合はQStringListのメンバに対してのみサポートされています。無関係なオブジェクトの無関係な機能が必要なので、ここで説明するように、それをファンクタオブジェクトにラップする必要があります:http://doc.qt.io/qt-5/qtconcurrentmap.html#using-function-objects – chrisaverage

関連する問題