2016-11-12 10 views
0

私はポインターの配列(関数のアドレス)を使用しています。 私は複数のタイプのデータ(char *intなど)を解析しています。 タイプエラーを避けるために、私は倍数void *を使用しています。 コンパイラが互換性のない型(コンパイル時に動作する)なので、混乱してしまいます。ポインターの配列の互換性のない型からの割り当て(c)

配列のプロトタイプは次のとおりです。

void *list(int x, void *arg) 
{ 
    arg_handler[0] = &my_putstr; 
    arg_handler[1] = &my_put_printable; 
    arg_handler[2] = &my_put_nbr; 
    arg_handler[3] = &my_put_nbr; 
    return (arg_handler[x](arg)); 
} 

私からリストを呼んでいる:私は別のアドレスを保存して、特定の引数を持つ関数のアドレスを返すために、リストと呼ばれる機能を使用していvoid *(*arg_handler[4])(void *arg);

list(f_type(s[x + 1]), va_arg(args, void *)); 

が、私はこのエラーを得た私はなぜ理解することはできません:主な機能を通じて

warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] 

用:

arg_handler[0] = &my_putstr; 
arg_handler[1] = &my_put_printable; 
arg_handler[2] = &my_put_nbr; 
arg_handler[3] = &my_put_nbr; 

任意のアイデア?

+0

その完全な警告を?私はそれがより具体的であると思った。 – alk

+0

また、この警告はどのコード行に正確に表示されますか? – alk

+0

はいこれは完全な警告です –

答えて

-1

alkは、4つの機能がvoid *と入力されていないため、警告が表示されたと述べています。だからではなく、各タイプの配列を作る私はそうvoid *としての機能を変換:

arg_handler[0] = (void *)my_putstr; 
arg_handler[1] = (void *)my_put_printable; 
arg_handler[2] = (void *)my_put_nbr; 
arg_handler[3] = (void *)my_put_nbr; 
+0

鋳造ハンマーを使用することはほとんど常にコンパイラを静かにします。定義されていない動作に... – alk

+0

f_typeはデータの解析を制御します –

+0

したがって、データは常にargハンドラで呼び出す関数の型に適合します –

関連する問題