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

只能在对象的实例上调用非静态函数。没有对象的实例来调用内部的函数qsort(它只是具有它认为不透明的指针),因此它不能调用成员函数。

于 2013-03-16T04:41:38.550 回答
1

静态成员函数是常规函数,但非静态成员函数是不同的。需要有额外隐藏的“this”参数才是区别所在。

于 2013-03-16T04:30:20.077 回答