Fez*_*vez 2 c++ qt qt4 qtconcurrent
似乎QtConcurrent可以正常使用QT容器(QList和QVector),但是使用STL容器失败了,而不是文档中声明的内容.
以下是我想在容器上使用的虚拟函数:
void addOne(int & i)
{
++i;
}
int addOneC(const int & i)
{
return i+1;
}
Run Code Online (Sandbox Code Playgroud)
什么有效的例子:
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);
}
Run Code Online (Sandbox Code Playgroud)
什么不工作:
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);
}
Run Code Online (Sandbox Code Playgroud)
它会导致编译错误,并且模板错误很长且模糊不清.
如果有人知道为什么,它会真的有帮助!谢谢!
错误日志:
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> 1> [1> _Alloc = int 1>] 1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0\VC\include\xutility(442):错误C2903:'重新绑定':符号既不是类模板也不是函数模板1> C:\ Program Files(x86)\ Microsoft Visual Studio 9.0\VC\include\xutility (442):错误C2039:'rebind':不是'
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>中声明的受保护成员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:'初始化':无法从'std :: _ Container_base_aux_alloc_real <_Alloc>'转换为'std :: vector < _Ty>'1> with 1> [1> _Alloc = int 1>] 1>和1> [1> _Ty = int 1>] 1>没有构造函数可以采用源类型,或者构造函数重载解析是不明确的
我认为你应该明确地给出容器的类型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);
}
Run Code Online (Sandbox Code Playgroud)
在您给出的简单示例中编译并给出预期结果.