2

QtConcurrentはQTコンテナ(QListおよび)では正常に動作するようですが、ドキュメントQVectorで主張されているものとは対照的に、STLコンテナでは失敗します

コンテナで使用したいダミー関数は次のとおりです。

void addOne(int & i)
{
    ++i;
}

int addOneC(const int & i)
{
    return i+1;
}

動作する例:

int main( int argc, char** argv )
{
    // Qt containers
    QList<int> l;
    l << 1 << 2 << 4 << 3;
    QList<int> l1 = QtConcurrent::blockingMapped(l, addOneC);
    QtConcurrent::blockingMap(l1, addOne);

    // Standard containers
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(4);
    v.push_back(3);
    QtConcurrent::blockingMap(v, addOne);
}

動作しないもの:

int main( int argc, char** argv )
{
    // Standard containers
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(4);
    v.push_back(3);
    vector<int> v1 = QtConcurrent::blockingMapped(v, addOneC);
}

これにより、コンパイルエラーが発生し、非常に長くてわかりにくいテンプレートエラーが発生します。

誰かが理由を知っていれば、それは本当に役に立ちます!ありがとう!


エラーログ:

1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):エラーC2825:'_Alloc':'::' 1>。\mainが後に続く場合は、クラスまたは名前空間である必要があります.cpp(187):クラステンプレートのインスタンス化への参照を参照'std :: _ Container_base_aux_alloc_real<_Alloc>'コンパイル中1>with1> [1> _Alloc = int 1>] 1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):エラーC2903:'rebind':シンボルはクラステンプレートでも関数テンプレートでもありません1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility (442):エラーC2039:'再バインド':'のメンバーではありませんglobal namespace'' 1>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xutility(442) : error C2143: syntax error : missing ';' before '<' 1>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xutility(442) : error C2039: 'other' : is not a member of 'グローバル名前空間''1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):エラーC2238:';'の前に予期しないトークンがあります 1>。\main.cpp(187):エラーC2248:'std :: _ Container_base_aux_alloc_real <_Alloc> ::〜_Container_base_aux_alloc_real':クラスで宣言された保護されたメンバーにアクセスできません' std :: _ Container_base_aux_alloc_real <_Alloc> '1> with 1> [ 1> _Alloc = int 1>] 1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(435):'std :: _ Container_base_aux_alloc_real <_Alloc> ::〜_Container_base_aux_alloc_real'1の宣言を参照> with 1> [1> _Alloc = int 1>]1>。\main.cpp(187):エラーC2440:'初期化中':

4

1 に答える 1

8

にコンテナのタイプを明示的に指定する必要があると思いますblockingMapped

int main( int argc, char** argv )
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(4);
    v.push_back(3);

    std::vector<int> v1 = QtConcurrent::blockingMapped<std::vector<int> >(v, addOneC);
}

コンパイルして、あなたが示した簡単な例で期待される結果を教えてください。

于 2011-07-20T13:11:11.270 に答える