Zeiger auf Funktionen
-
Hallo zusammen,
ich habe eine Fage zu Zeigern auf Funktionen und hoffe ihr könnt mir ein bisschen weiterhelfen:ich habe eine Klasse Test:
class Test
{
private:
bool (*CheckWord) (char*); //Zeiger auf FKT
public:
void setFunc(bool (*ptr) (char*)); //Setter Methode für *CheckWord
};das sieht dann ungefähr so aus:
void Test::setFunc(bool (*ptr) (char*))
{
CheckWord = ptr;
}Jetzt hab ich in der MAIN Funktion meines Programms ein Objekt von
der Klasse TEST erstellt (z.b. "testopject"). Außerdem die Funktion
bool check (char *str); .Ein Aufruf von testobject->setFunc(check); funktioniert einwandfrei !
Ein Aufruf von CheckWord() innerhalb der Klasse Test, ruft die Funktion check() in main auf !Sobald ich aber eine zweite Klasse "Foo" erstelle, und dort ein Objekt von "test", sowie die Funktion bool check (char *str) erstele und dort soetwas versuche:
void foo::eineFunktionVonFoo(void)
{
this->testobjekt->setFunc(check);
}beschwert sich der Compiler
Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt, und ihr könnt mir weiter helfen.Hier noch die Meldung(gcc version 3.3.3):
foo.cpp:204: error: no matching function for call to `Test::
setFunc(<unknown type>)'
Test.h:61: error: candidates are: bool Test::setFunc(bool
()(char))gruß,
gripmaster
-
Hallo,
zeig doch bitte mal, wei die Funktion check ausschaut.
mfg
v RPS: Bitte benutz Codetags, damit ist der Code besser lesbar
-
nur so:
bool check(char *str) { std:out << str << std::endl; }
-
Sobald ich aber eine zweite Klasse "Foo" erstelle, und dort ein Objekt von "test", sowie die Funktion bool check (char *str) erstele und dort soetwas versuche:
Das ich das richtig verstehe, du hast check als globale Funktion oder hast du
check jetzt hier als Memberfunktion der Klasse Foo? Denn in diesem Falle kannst
du normale Funktionszeiger nicht mehr anwenden, da jede Memberfunktion implizit
den this-Zeiger mitfuehrt. Was du hier dann brauchst, ist ein Zeiger auf eine
Memberfunktion:class Test { private: typedef bool (Foo::Func)(char*); Func* fptr; public: bool setFunc(Func* ptr) { fptr = ptr; } };
mfg
v R
-
genau! Wenn Check global ist, funktioniert es. Ist check eine Memberfunktion von "Foo" klappts nicht.
Ich lasse jetzt erstmal "check" global, weil in "Test" "foo" überhaupt nicht bekannt ist.(und das soll auch nicht so sein!).
Vielleicht fällt mir (oder dir/euch*g*) noch was anderes ein.Erstmal vielen Dank für deine Hilfe!
gruß, gripmaster