Создание потока в функции C++

196
08 июня 2018, 01:20

В нижеприведённом коде я пытаюсь создать поток в функции и выполнить в нём другую функцию.

void main()
{
  thread t1(A, String1, String2);
  t1.join();
}
void A(string String1, string String2)
{
  thread t[10];
  int score = 0;
  for (size_t i = 0; i < 10; i++)
  {
    t[i] = thread (B, String1, String2, &score);
  }
}
void B(string String1, string String2, int &score)
{
  ++score;
}

В результате получаю такую ошибку

*Error C2672 'std::invoke': no matching overloaded function found

Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept()'*

Подскажите, пожалуйста, что сделано не правильно?

Answer 1

Вы передаете параметры по ссылке в поток без использования std::ref.

Вам стоит использовать std::ref о котором подробно можно прочитать здесь по ссылке.

Краткое описание:

Шаблоны функций ref и cref являются вспомогательными функциями, которые генерируют объект типа std::reference_wrapper, используя вывод типа аргумента шаблона для определения аргумента шаблона результата.

READ ALSO
Как сохранить PPM-файл в бинарном виде?

Как сохранить PPM-файл в бинарном виде?

Делаю лабораторную своего университета, где задачей является сохранение картинок в форматеppm

197
DataGridView выделение строк

DataGridView выделение строк

Нужна помощьЕсть datagridview в него считывается и записывается таблица из файла

213
Задача с доской

Задача с доской

Имеем доску, в которую на определенном расстоянии друг от друга вбиты гвоздиЛюбые два гвоздя можно соединить веревкой

203