Mit Hilfe einer member-Funktion-Zeiger innerhalb einer Klasse
Gegeben, ein Beispiel der Klasse:
class Fred
{
public:
Fred()
{
func = &Fred::fa;
}
void run()
{
int foo, bar;
*func(foo,bar);
}
double fa(int x, int y);
double fb(int x, int y);
private:
double (Fred::*func)(int x, int y);
};
Bekomme ich einen compiler-error in der Zeile Aufruf der member-Funktion über den Zeiger "*func(foo,bar)", nämlich: "Begriff Auswertung nicht eine Funktion, die 2 Argumente". Was mache ich falsch?
- danke für das edit 🙂
- ...kein problem 😉
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die syntax, die Sie benötigen, sieht wie folgt aus:
Damit Ihren Anruf:
Ich glaube, dass eine Alternative syntax wäre:
Benötigen Sie die folgenden funky syntax zum Aufruf member-Funktionen über einen Zeiger:
Gibt es zwei Dinge, die Sie brauchen zu kümmern. Die erste ist die Deklaration der Funktion Zeiger Typ:
Weiter ist die syntax für einen Aufruf der Funktion mit Zeiger:
Hier ist der geänderte code wird kompiliert und ausgeführt:
Einer member-Funktion mit zwei args ist wirklich ein drei-arg-Funktion. 'dies' ist ein implizites argument, also die Fehler, die Sie erhalten, über das fehlen der 'dieses' arg.
Nicht statische Memberfunktionen haben versteckten this-Zeiger als argument.
Ich denke, die syntax
(this->*func)(foo,bar)
ist der Weg, um compiler zu verstehen, dass Sie brauchen, um dieses an die Funktion.