Ошибка с указателями функций - PullRequest
3 голосов
/ 11 февраля 2011

Я использую этот ресурс, чтобы помочь мне с указателями функций: здесь Но в этом коде (написанном ниже), компиляция на gcc говорит:

line 15: warning: dereferencing 'void*' pointer
line15:error:called object *foo is not a function

Код здесь:

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>

void print_mess(void *ptr)
{
        char *message = ptr;
        printf("%s\n",message);
}
void main()
{
        void* foo = print_mess;
        char *mess = "Hello World";
        (*foo)((void*)mess);
}

Очень простая тестовая функция, чтобы освежить мои знания, и мне стыдно даже столкнуться с такой проблемой, не говоря уже о том, чтобы опубликовать ее на SO.

1 Ответ

4 голосов
/ 11 февраля 2011

Ваш указатель неверного типа. Вам необходимо использовать:

void (*foo)(void *) = print_mess;

Это выглядит странно, но это определение указателя на функцию. Вы также можете ввести его:

typedef void (*vp_func)(void *);
vp_func foo = print_mess;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...