У меня есть функция, где я создаю новый pthread
, а затем работать с ним позжеПолучение сообщение об ошибке: «это» недоступен для статических функций-членов, даже если функция не является статичным
void Client::initialize(Client * c) {
//some unimportant code here
pthread_t thread;
pthread_create(&thread, NULL,
c->sendMessage, (void *) fd);
//some unimportant code here
}
Client::Client() {
initialize(this);
}
sendMessage
функции:
void * Client::sendMessage(void *threadid) {
//unimportant code here
this->showHelp();
//unimportant code here
return NULL;
}
декларация showHelp
void Client::showHelp() {
//some code
}
Когда я пытаюсь скомпилировать его, я получаю эту ошибку:
g++ -Wall -pedantic -Wno-long-long -O0 -ggdb -pthread -lncurses -g -c ./Client.cpp
./Client.cpp: In static member function ‘static void* Client::sendMessage(void*)’:
./Client.cpp:244:13: error: ‘this’ is unavailable for static member functions
make: *** [Client.o] Error 1
Как это возможно, когда sendMessage
не объявлен как static
? Есть ли способ?
Какое у вас есть определение своего класса? Держу пари, что вы £ 1 объявляет 'sendMessage' как' static'. –
Я обновляю свой пост через минуту. – Dworza
Вы, вероятно, хотите '& Client :: sendMessage' в вашем вызове' pthread_create', хотя вы просто не можете передавать указатели на функции-члены. – chris