Похоже, что 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> с1> [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: '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>'> 11> _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: «инициализация»: невозможно преобразовать из «std :: _ Container_base_aux_alloc_real <_Alloc>» в «std :: vector <_Ty> '1> с 1> [1> _Alloc = int 1>] 1> и 1> [1> _Ty = int 1>] 1> Ни один конструктор не может принять тип источника, или разрешение перегрузки конструктора было неоднозначным