Let’s say I have a class such as
class c {
// ...
void *print(void *){ cout << "Hello"; }
}
And then I have a vector of c
vector<c> classes; pthread_t t1;
classes.push_back(c());
classes.push_back(c());
Now, I want to create a thread on c.print();
And the following is giving me the problem below:
pthread_create(&t1, NULL, &c[0].print, NULL);
Error Output: cannot convert ‘void* (tree_item::*)(void*)’ to ‘void*
(*)(void*)’ for argument ‘3’ to ‘int pthread_create(pthread_t*, const
pthread_attr_t*, void* (*)(void*), void*)’
You can’t do it the way you’ve written it because C++ class member functions have a hidden
thisparameter passed in.pthread_create()has no idea what value ofthisto use, so if you try to get around the compiler by casting the method to a function pointer of the appropriate type, you’ll get a segmetnation fault. You have to use a static class method (which has nothisparameter), or a plain ordinary function to bootstrap the class: