Funktionspointer in Klasse!?
-
Achso verstehe, d.h. der compiler rafft nich, wenn ich mich in der klasse befinde und elemente aus der selben klasse verwenden möchte, mann muss also den klassen namen explizit angeben!?
-
Die Funktion gehört fest zur Klasse, deswegen muss in Zeile 3 auch gesagt werden, wo sich die Funktion befindet (in der Klasse foo) und auch beim Definieren der Variable bla muss der Compiler wissen, dass wir die Funktion in foo meinen und nicht eine X-beliebige andere im global-scope.
-
Ahh ok verstehe danke;)
-
Es ist eine nicht-statische Elementfunktion. Als solche darf man innerhalb der Funktion this verwenden, welches auf magische Art und Weise auf das Objekt zeigt, dessen Elementfunktion aufgerufen wurde. Diese Information muss aber irgendwoher kommen. Man kann sich das als weiteren unsichtbaren Funktionsparameter vorstellen. Dementsprechend lässt sich die Funktion, was Funktionszeiger und deren Aufrufsyntax angeht, nicht wie eine normale freie Funktion behandeln. Aufrufen musst du das Ding z.B. so:
int i = 23; int j = (ein_bestimmtes_foo_object.*funcPointer)(&i); // oder z.B. int k = (this->*funcPointer)(&i);
-
Was ich nun nich verstehe, das ich die funktion nich aufrufen kann!? kompilerfehler
foo(void) { int tmp =34; funcPointer bla = &TestFunc; //B bla(&tmp); }
da gibts es mir folgender fehler:
Fehler 2 error C2064: Ausdruck ergibt keine Funktion, die 1 Argumente übernimmt
-
Cyres schrieb:
funcPointer bla = &foo::TestFunc;
krümelkacker schrieb:
int k = (this->*funcPointer)(&i);
Wenigstens die Antworten sollte man zu seinen Fragen auch lesen
-
Lies doch mal bitte was dein Vorposter dir erklärt hat.
-
da habt ihr absolut recht, aber wo in dieser antwort
int k = (this->*funcPointer)(&i);
ist der
funcPointer bla = &foo::TestFunc;
kontext?
-
NullbockException schrieb:
...
funcPointer bla = &foo::TestFunc;
...
Ach, funcPointer ist der Typ. Ich hatte den nämlich wie einen Variablennamen verwendet. Aber dann sieht's halt so aus:
int ergebnis = (this->*bla)(&i);
Zumindest dann, wenn die Funktion auf *this aufgerufen werden soll.
-
Oder analog dazu:
int ergebnis = (Test::*bla)(&i);
Wenns öffentlich sein soll.
MfG