Kiedy używam a
static int CompareFunction(const void* _g1, const void* _g2);
dane wejściowe do qsort są prawidłowe
ale za pomocą
int CompareFunction(const void* _g1, const void* _g2);
dane wejściowe do qsort są nieprawidłowe. i błąd jest następujący:
error: argument of type "int (<namespace>::<ClassName>::)(const void*, const void*)" does not match "__compar_fn_t {aka int (*)(const void*, const void*)}"
W jaki sposób statyczny może zmienić zachowanie w taki sposób? Chodzi mi o to, że wszystko, co robię, to po prostu zmiana funkcji w klasie, aby była statyczna, co oznacza, że brakuje jej tego wskaźnika. Nie wprowadzam już żadnych zmian.
Odpowiedzi:
1 dla odpowiedzi № 1Funkcję niestatyczną można wywołać tylko w przypadku wystąpienia obiektu. Wewnątrz nie ma obiektu wywołującego funkcję qsort
(ma tylko wskaźniki, które uważa za nieprzejrzyste), więc nie może wywoływać funkcji członka.
1 dla odpowiedzi nr 2
Statyczna funkcja członka jest funkcją regularną, ale niestatyczna funkcja członka jest czymś innym. To, co robi różnicę, to konieczność posiadania dodatkowego ukrytego parametru „this”.