私のコードでは、ラムダとしていくつかの関数を使用する必要があります。たとえば、に提供する必要がありますqsort
。
したがって、タイプの関数を渡したときint
、プログラムは正常に機能していました。しかし、タイプの別の関数も追加するとdouble
、エラーメッセージが表示されました。
1.c:44:29:エラー:バイナリ<へのオペランドが無効です(「double*」と「double」があります)
行から:
return (*getter)(a) < target
getter
ポインタはどこにありますか:
double get_sex(struct human* a) { // it's the second function I've passed
return a->sex;
}
私が渡した2つの関数の唯一の違いは、最初の関数がでint
あり、2番目の関数がであるということですdouble
。
sometype somefunction (some parameters,
int *comparator(struct human*, double, double *(struct human*)),
double *getter(struct human*) ) {
....
}
私はそれを調べ始めてsizeof
、どういうわけかコード(*getter)(*a)
が8ではなく4バイトを返すので、それはdoubleではなくポインタでなければならないことを発見しました。そのため、エラーメッセージが表示されました。例としてウィキペディア
にアクセスし、追加のを見つけました。それらを追加しましたが、8バイトを返し、正常に動作します。()
double (*getter)(struct human*) ) {
だから問題は:なぜ私は周りに括弧を追加する必要がありますgetter
が、周りには追加しないのcomparator
ですか?関数が?!double
の代わりに戻る理由は何ですか?int
それは私が聞いたことがない構文の詳細についての何かです。
(私は、すでにインストールされているWindowsで見つけたコンパイラーを使用しています– PerlインタープリターStrawberryから)