Я хочу использовать packaged_tasks для добавления задач в контейнер. Я создаю задачу, привязываю ее к числу и пытаюсь подтолкнуть ее к моему деку. Я получаю ошибку компилятора C2280 (VS2013) на push_back. Вот код:нажатие упакованной задачи в контейнер вызывает ошибку C2280 в VS2013
void DoTask(int i)
{
std::cout << "int value: " << i << std::endl;
}
std::deque< std::packaged_task< void() > > task_q;
int _tmain(int argc, _TCHAR* argv[])
{
std::packaged_task< void() > t(std::bind(DoTask, 3));
task_q.push_back(t); // <-- C2280 error
return 0;
}
Я получил этот пример кода из лекции YouTube Бо Цянь называется "C++ Threading # 9: packaged_task". Вот код ошибки: «ошибка C2280: » std :: packaged_task :: packaged_task (const std :: packaged_task &) ': попытка ссылки на удаленную функцию ... см. Объявление' std :: packaged_task :: packaged_task '... при компиляции функции-члена шаблона класса' void std :: allocator < _Ty> :: construct (_Ty *, const _Ty &) ' 1> с 1> [ 1> _Ty = std :: packaged_task "
Вот код после двух коррекций (перемещение задачи и непусто возвращаемого значения):
int DoTask(int i) // non-void return value
{
return i;
}
std::deque< std::packaged_task< int() > > task_q; // bind eliminates need for arg (Bo Qian lecture)
int _tmain(int argc, _TCHAR* argv[])
{
std::packaged_task< int() > t(std::bind(DoTask, 3)); // bind eliminates need for arg
task_q.push_back(std::move(t)); // <-- move not copy
return 0;
}
Можете ли вы разместить текст ошибки вместо номера ошибки? – PaulMcKenzie