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!


Log in to reply