Zwracanie wskaźnika na funkcję przez funkcję

Zwracanie wskaźnika na funkcję przez funkcję
Kamil9132
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 173
0

Witam.
Dlaczego poniższy kod przy próbie kompilacji zwraca poniższe błędy?

Kopiuj
class Person : public IDrawable{
	typedef bool (*Compare_Function) (Person &, Person &);
	bool Compare_By_Name(Person &First, Person &Second){

		...

	}

public:

	static Compare_Function Get_Compare_Function(int Sort){

		...

		return Compare_By_Name;

	}

Błąd 3 error C2440: "return" : nie można konwertować z "bool (__thiscall Person::* )(Person &,Person &)" na "Person::Compare_Function"
Błąd 2 error C3867: "Person::Compare_By_Name": w wywołaniu funkcji brakuje listy argumentów; użyj "&Person::Compare_By_Name", aby utworzyć wskaźnik do elementu członkowskiego

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
3

Bo typy się nie zgadzają. Istnieje różnica między

Kopiuj
bool (*)(Person&, Person&)

a

Kopiuj
bool (Person::*)(Person&, Person&)

Compare_Function to wskaźnik na zwykłą funkcję, nie metodę klasy Person.

Kopiuj
typedef bool (Person::*Compare_Function)(Person&, Person&);
....
static Compare_Function Get_Compare_Function(int Sort){
    return &Person::Compare_By_Name;
}
Kamil9132
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 173
0

Dziękuję za pomoc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.