Я получаю предупреждение выше и понимаю его, но просто не знаю, как его исправить. Мой код ниже, но в основном то, что я делаю, это хранить указатель на функцию в структуре и инициализировать структуру в другой функции, которую я вызываю из моей основной. Код, кажется, компилируется, когда я использую его с функцией по умолчанию (т. Е. Free()), но не тогда, когда я использую его с помощью функции test_func ниже. Мысли?function pointer несовместимые типы указателей void (*) (void *) from void (my_type *)
Struct:
typedef struct my_struct {
my_type **double_pointed;
int num;
void (*funcp)(void *data);
} my_struct_t;
Init Функция:
my_struct_t *init(int num, void (*my_funcp)(void *data)) {
// unimportant code to the problem, but basically just some mallocs for the other data
my_struct_t *my_str;
my_str->funcp = my_funcp;
return struct;
}
функция Я хочу, чтобы указать:
void desired_func(my_type *obj) {}
мой призыв к инициализации FUNC:
init(5, desired_func);
полная ошибка:
несовместимых типов указателей присвоение 'пустоты (*) (пустота *)' от 'пустоты (my_type *)'
на линии в функции инициализации выше:
my_struct_t *my_str;
my_str->funcp = my_funcp;
Проблема в том, что она должна работать со всеми типами данных, поэтому void * – bobbyyu10
@ bobbyyu10: Я уже обращался к этому вопросу –
Преобразование в и из 'void *' не требует приведения, поэтому 'my_type * obj = vobj; 'достаточно. – user3386109