2016-10-08 4 views
-1

Qtを初めて使う学生です。私はこのプログラムをQt Concurrent機能でコーディングし始めました。プログラムは、数値が1に収束するか収束するかを計算することになっています。長さが100を超えると、それは発散します。QtでQConcurrentクラスを操作するには

は、これは私のコード

#include <QtConcurrent/QtConcurrentMap> 
#include <QFuture> 
#include <vector> 
#include <iostream> 
using namespace std; 

bool converges(int &n) 
{ 
    int count = 0; 
    while (count < 100 && n > 1) 
    { 
     if (n % 2 == 0) 
     { 
      n = n/2; 
     } 
     else 
     { 
      n = 3*n+1; 
     } 
     if(count > 100) 
     { 
      break; 
     } 
     count = count + 1; 
    } 
    if (n = 1 && count <= 100) 
     return true; 
    else 
     return false; 
} 

int main(int argc, char *argv[]) 
{ 
    int N = 1000000; 
    vector <int> data; 
    for(int i = 0; i < N; i++) 
    { 
     data.push_back(i); 
    } 
    QFuture <void> res = QtConcurrent::map(data,converges); 
    res.waitForFinished(); 
    return 0; 
} 

あるしかし、私はエラーを構築し得ます。私が間違っているところには何か提案がありますか?

これは私が私の.proファイルへQT += concurrentを追加、@マイクで答えたよう

main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QtConcurrent::ThreadEngineBase::ThreadEngineBase(void)" ([email protected]@@[email protected]) referenced in function "public: __thiscall QtConcurrent::IterateKernel > >,void>::IterateKernel > >,void>(class std::_Vector_iterator > >,class std::_Vector_iterator > >)" ([email protected][email protected][email protected][email protected]@[email protected]@@[email protected]@@[email protected]@[email protected]@@[email protected][email protected][email protected][email protected]@[email protected]@@[email protected]@@[email protected]@[email protected])

+0

あなたのプロファイルにQT + =同時行があることを確認してください。それ以降もqmakeを実行していることを確認してください。 – demonplus

+2

'.pro'ファイルに' QT + = concurrent'を追加して、Qt並行モジュールとリンクします。無駄な情報をあなたの質問から取り除いてください。エラーは、関数が収束したり分岐したりするのを計算しようとすることとは何の関係もありません。 [MCVE](https://stackoverflow.com/help/mcve)の問題を減らしてみてください。そうすれば、あなたの質問は同じ問題に直面している他の人にも役立ちます。あなたの現在のタイトルはエラーとは関係ありません。 – Mike

+0

なぜQtを混乱させるのですか?関数が入力に収束するかどうか、質問は非常に洗練されたものになりますが、通常は100ステップ程度実行して、それが収束しているか、それとも野生であるかを確認します。 –

答えて

2

を得続けるエラーが私のために働いています。

+0

これが解決策であれば答えを受け入れてください:) – demonplus

+0

'#を含む必要はありません。 '.pro'ファイルから' QT + = concurrent'が見つからなかったので、あなたはここにいなければなりませんでした。これを修正したので、単純に '#include 'する必要があります。将来的には、スラッシュインポートを行わない限りコードがコンパイルされなければ、これは '.pro'ファイルにモジュールを追加する必要があることを明確に示しています。 –

関連する問題