2013-03-16 29 views
0

變化當我使用一個靜態函數輸出與普通FN輸出

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

輸入到快速排序是正確

但使用

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

輸入到快速排序是錯誤的。並且錯誤是: error: argument of type 'int (<namespace>::<ClassName>::)(const void*, const void*)' does not match '__compar_fn_t {aka int (*)(const void*, const void*)}'

靜態如何以這種方式更改行爲?我的意思是我所做的只是將一個類中的函數改爲靜態,這意味着它現在缺少這個指針。我沒有更多的變化。

+0

如果你的比較器需要訪問你的類的部分,請嘗試'std :: sort'而不是'qsort'。這會給你更多的靈活性,因爲你可以使用函數或lambda函數,而不是隻有沒有附加參數的普通函數。 – StilesCrisis 2013-03-16 04:32:48

回答

1

只能在對象的實例上調用非靜態函數。沒有對象的實例在qsort(它只是具有它認爲不透明的指針)內部調用函數,所以它不能調用成員函數。

1

靜態成員函數是一個常規函數,但非靜態成員函數是不同的。需要額外隱藏「這個」參數是造成這種差異的原因。