似乎 QtConcurrent 与 QT 容器 (QList
和) 一起工作正常,但与 STL 容器一起失败,这与文档QVector
中声称的相反
以下是我想在容器上使用的虚拟函数:
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> 编译 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:“重新绑定”:不是“的成员”
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 的声明> 使用 1> [ 1> _Alloc=int 1> ] 1>.\main.cpp(187) :错误 C2440:“正在初始化”: