Как говорится, это две разные сигнатуры функций. Вы должны сделать:
void *SomeMethod(void* direction) // note, void
{
char* dir = static_cast<char*>(direction); // and get the value
}
C, по-видимому, приводил от одного указателя функции к другому. Приведение одного указателя на функцию - неопределенное поведение в C ++.
Тем не менее, я почти уверен, что POSIX требует, чтобы приведение между указателями функций было четко определено, поэтому вы можете сделать это вместо этого:
pthread_create(&threads[i], &attr, // cast the function pointer
reinterpret_cast<void* (*)(void*)>(SomeMethod), ptrChar);