当我使用
时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*)}'
静态如何以这种方式改变行为?我的意思是我所做的只是将类中的函数更改为静态,这意味着它现在缺少此指针。我没有更多的改变。
答案 0 :(得分:1)
静态成员函数是常规函数,但非静态成员函数是不同的。需要额外隐藏&#34;这个&#34;参数是产生差异的原因。
答案 1 :(得分:1)
只能在对象的实例上调用非静态函数。没有对象的实例可以在qsort
内调用该函数(它只有它认为是不透明的指针),所以它不能调用成员函数。