似乎QtConcurrent适用于QT容器(QList
和QVector
),但与STL容器失败,而不是声明in the documentation
以下是我想在容器上使用的虚拟函数:
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&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):错误C2825:'_ Alloc':后跟'::'时必须是类或命名空间 1 GT; 。\ main.cpp(187):参见类模板实例化'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt;'被编译 1 GT;同 1 GT; [ 1 GT; _Alloc = INT 1 GT; ] 1&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):错误C2903:'rebind':符号既不是类模板也不是函数模板 1&gt; 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&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(442):错误C2238:';'之前的意外令牌 1&gt;。\ main.cpp(187):错误C2248:'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt; ::〜_Container_base_aux_alloc_real':无法访问类'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt;'中声明的受保护成员 1 GT;同 1 GT; [ 1 GT; _Alloc = INT 1 GT; ] 1 GT; C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ xutility(435):请参阅'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt; ::〜_Container_base_aux_alloc_real'的声明 1 GT;同 1 GT; [ 1 GT; _Alloc = INT 1 GT; ] 1&gt;。\ main.cpp(187):错误C2440:'初始化':无法转换为'std :: _ Container_base_aux_alloc_real&lt; _Alloc&gt;'到'std :: vector&lt; _Ty&gt;' 1 GT;同 1 GT; [ 1 GT; _Alloc = INT 1 GT; ] 1 GT;和 1 GT; [ 1 GT; _Ty = INT 1 GT; ] 1 GT;没有构造函数可以采用源类型,或者构造函数重载解析是不明确的
答案 0 :(得分:6)
我认为你应该明确地将容器的类型赋予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);
}
在您给出的简单示例中编译并给出预期结果。