2013-03-11 3 views
0

Я написал очень простой код для потоковой передачи. Поскольку я очень новичок в этом, я понятия не имею об упомянутой ошибке.error: аргумент типа "void (opca_hello ::)()" не соответствует "void * (*) (void *)"

class opca_hello 
{ 
public: 
void hello(); 
} 

void opca_hello::hello() 

{ 
printf ("hello \n"); 
} 


int main(int argc, char **argv) 
{ 
opca_hello opca; 
pthread_t thread1, thread2; 
pthread_create(&thread1, NULL, opca.hello, NULL); 
pthread_join(thread1, NULL); 
return 0; 
} 

ошибка: аргумент типа "пустоте (opca_hello ::)()" не соответствует "VOID * (*) (Недействительными *)"

+6

функция член указатели не то же самое, как указатели на функции. У вашей функции-члена есть один параметр. – chris

+0

Спасибо за ответ @chris Не могли бы вы прояснить то же. Я имею в виду, где именно мне нужно изменить код. – sajal

+0

Вам нужно указать указатель на функцию без параметров. – chris

ответ

3

C++ вызывает к функциям-членам необходимо передать указатель к этому наряду с остальными аргументами.

Так, чтобы использовать нити написать такой код:

static void *start(void *a) 
{ 
    opca_hello *h = reinterpret_cast<opca_hello *>(a); 
    h->hello(); 
    return 0; 
} 

pthread_create(&thread1, NULL, start, &opca); 

PS:

Если вам нужно передать параметры методу сделать что-то вроде этого (например):

Struct threadDetails { opca_hello * obj; int p; };

static void *start(void *a) 
{ 
    struct threadDetails *td = reinterpret_cast<struct threadDetails *>(a); 
    td->obj->hello(td->p); 
    delete td; 
    return 0; 
} 

Тогда:

struct threadDetails *td = new struct threadDetails; 
td->obj = &opca; 
td->p = 500; 
pthread_create(&thread1, NULL, start, td); 
+0

Получена ошибка :: Main.cpp: 4: error: âvoid * â не является типом указателя на объект. Если позже я изменю свой код, чтобы вызвать функцию внутри hello, тогда статический не может быть использован. Правильно? – sajal

+0

@sajal - Моя ошибка. Исправьте код выше. –

+0

@NicolBolas - Ваше право - Мозг еще не в снаряжении. –

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