Zeiger auf Member-Function
-
Hallo!
Ich habe zwei Klassen geschrieben:
- eine Klasse "roots" mit der static-Function "newton". Sieht im Header-File so aus:class roots { public: //calculates the root of function f with the given precision //between min and max; when getting under min or over max while //calculating, the function stops and returns min-1 resp. max+1 static double newton(double (*f)(double), double min, double max, double precision); };
- eine Klasse Polynom mit einer Member-Function "func". Sieht im Header-File so aus:
class polynom { public: //... double func(double x); //... };
Nun möchte ich in einer weiteren Member-Function von polynom eine Nullstelle berechnen und dafür einen Zeiger auf die Funktion "func" an "newton" übergeben. Dies compiliert aber nicht mir der Meldung:
Compiler schrieb:
Ungueltige Operation auf Ausdruck einer gebundenen Member-Funktion
Was mache ich falsch? Ist es prinzipiell nicht möglich, Referenzen auf Member-Functions zu übergeben?
MfG
Peter
-
Der Typ des ersten Parameters von newton passt nicht. Es muss
double (polynom::*f)(double)
sein.
Beachte bitte, dass du zusätzlich noch eine Instanz von polynom (bzw. eine Referenz oder einen Zeiger darauf) brauchst, um die Funktion tatsächlich aufzurufen. Das geht dann mit dem .* bzw. dem ->* Operator.
-
Hallo!
Dann ist es also nicht möglich, die Funktion "newton" so zu schreiben, dass sie sowohl allgemein verwendbar ist, also auch für "polynom::func"?
MfG
Peter
-
du könntest sie überladen- um eine elementfunktion einer anderen klasse aufzurufen braucht man immer auch eine instanz von dieser klasse, deshalb geht beides auf einmal so auch nicht.
-
Hm, wenn ich das so lese, hätte ich da auch selber drauf kommen können ... Danke!