typedef void (*func1)(void*, char*, void*) = iterate_test;
недопустимо, поскольку typedef определяет тип, а не переменную
Объявление
static void iterate_test(void *node);
неверно, потому что функция
static void iterate_test(void *node, char *key, void *item)
{
...
}
замените ее на
static void iterate_test(void *node, char *key, void *item);
Даже когда я передаюУказатель func1 выдаёт мне ошибку
После предыдущего исправления void (*func1)(void*, char*, void*) = iterate_test;
правильно (без typedef
)
Ошибка / предупреждение Я получаю: предупреждение: передача аргумента 3 'set_iterate' из несовместимого типа указателя
прототип set_iterate: void set_iterate (set_t * set, void * arg, void (* itemfunc) (void * arg, const char * key, void * item));
указатель функции, ожидаемый set_iterate
, требует const char *
для своего второго параметра, но iterate_test
имеет char *
для своего второго параметра, вот почемусообщение
Удалите const в профиле set_iterate
или измените объявление и определение iterate_test
на
static void iterate_test(void *node, const char *key, void *item);
...
static void iterate_test(void *node, const char *key, void *item)
{
...
}
Конечно, во втором случае, если вы все еще хотите сохранить указатель в func1 , вам нужно иметь
void (*func1)(void*, const char*, void*) = iterate_test;