Я сделаю удар в темноте, предварительно [MCVE] (но, пожалуйста, предоставьте его).
Ваше объявление для RispostaServer
выглядит так?
void* RispostaServer();
Тогда единственная версия RispostaServer
, видимая для вызова pthread_create
, это та, которая не принимает аргумент.Это соответствует жалобе типа, выдвинутой компилятором.
Ваша более поздняя функция определение создает новую перегрузку RispostaServer
, что действительно принимает аргумент, и вы 'Я мог бы вызывать этот код ниже, но к тому времени это слишком поздно для вызова pthread_create
.
Объявление должно соответствовать определению:
// Entrypoint for Risposta worker thread.
// Argument must be a risposta*, cast to `void*`.
void* RispostaServer(void* m);
Кстати,ваш поток будет разорван, потому что вы передаете указатель на локальную переменную, которая немедленно выходит за рамки видимости, поэтому добавьте следующий комментарий к приведенному выше:
// The risposta it points to must exist for the lifetime
// of the thread.
… и вам действительно следует использоватьstd::thread
, а не C API библиотеки для конкретной платформы.