上記の警告が表示されて理解していますが、修正方法はわかりません。私のコードは以下の通りですが、基本的には、構造体に関数ポインタを格納し、メインから呼び出す別の関数で構造体を初期化しています。コードは、デフォルトの関数(つまりfree())で使用するとコンパイルされるようですが、以下のtest_func関数で使用するとコンパイルできません。思考?関数ポインタが互換性がないポインタ型void(my_type *)からvoid(*)(void *)
構造体:
typedef struct my_struct {
my_type **double_pointed;
int num;
void (*funcp)(void *data);
} my_struct_t;
初期化機能:私はを指すようにしたい
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) {}
のinit FUNCに私の呼び出し:
init(5, desired_func);
フルエラー: 'ボイド(my_type *)' から 'ボイド(*)(*ボイド)' に代入
互換性のないポインタ型線上
init関数で上記:
my_struct_t *my_str;
my_str->funcp = my_funcp;
問題は、すべてのデータ型で動作する必要があることです。したがって、void * – bobbyyu10
@ bobbyyu10:これも同様です。 –
'void *'への変換はキャストを必要としないので、 'my_type * obj = vobj; 'で十分です。 – user3386109