0

私が使用するとき

static int CompareFunction(const void* _g1, const void* _g2);

qsortへの入力は正しい

しかし、使用

int CompareFunction(const void* _g1, const void* _g2);

qsortへの入力が間違っています。エラーは次のとおりです。 error: argument of type 'int (<namespace>::<ClassName>::)(const void*, const void*)' does not match '__compar_fn_t {aka int (*)(const void*, const void*)}'

このような方法で静的に動作を変更するにはどうすればよいですか?つまり、私が行っているのは、クラス内の関数を静的に変更することだけです。つまり、このポインターが不足しているということです。私が行っている変更はこれ以上ありません。

4

2 に答える 2

1

静的メンバー関数は通常の関数ですが、非静的メンバー関数は別のものです。余分な隠された「this」パラメータを持つ必要性が違いを生むのです。

于 2013-03-16T04:30:20.077 に答える
1

非静的関数は、オブジェクトのインスタンスでのみ呼び出すことができます。内部に関数を呼び出すオブジェクトのインスタンスがないためqsort(不透明と見なされるポインターがあるだけです)、メンバー関数を呼び出すことはできません。

于 2013-03-16T04:41:38.550 に答える