/ Wyjście funkcji / static różni się od zwykłego wyjścia fn - c ++, elementy statyczne

Wynik funkcji statycznej różni się od zwykłego wyjścia fn - c ++, statyczne

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 № 1

Funkcję 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”.