2013-06-09 1 views
2

У меня есть функция, где я создаю новый 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? Есть ли способ?

+0

Какое у вас есть определение своего класса? Держу пари, что вы £ 1 объявляет 'sendMessage' как' static'. –

+0

Я обновляю свой пост через минуту. – Dworza

+1

Вы, вероятно, хотите '& Client :: sendMessage' в вашем вызове' pthread_create', хотя вы просто не можете передавать указатели на функции-члены. – chris

ответ

6

Скорее всего, ваш sendMessageis, объявленный как статический в определении класса. Определенные определения функций-членов неразличимы для статических и нестатических функций. Вы должны посмотреть определение класса, чтобы рассказать им обособленно.

+0

Хорошо ... Я идиот ... Я потратил 2 часа на поиск того, что может быть неправильно, и, конечно же, я объявил его статичным в заголовочном файле x -) – Dworza

Смежные вопросы