(C++) array mit Pointern auf Funktionen
-
dange
-
hmmmm ... so hatte ich das eigentlich auch im Kopf.
nur in diesem Fall funzt das so nicht.Die Funktionen gehören zu einer einer Klasse
typedef void (*lp_AUF_VFUNKT)(void); class KWizz { public: KWizz(int language); ~KWizz(); (...) private: lp_AUF_VFUNKT lpHideFunc[10]; void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void); }; ************************* KWizz::KWizz(int language) { (...) lpHideFunc[0]=hideStep0; lpHideFunc[1]=hideStep1; (...) }
so nimmt der Kompiler das jedenfalls nicht.
-
Dann sag halt im typedef, dass sie zur Klasse gehören
typedef void (*KWizz::lp_AUF_VFUNKT)(void);
-
das funzt alles von hinten bis vorne nich!
ausserhalb einer Klasse -> no Prob
in einer Klasse:
entweder der Compiler meckert
oder die Funktion wird nicht ausgeführt
-
so!
denn eben mit Spagetticode!
eine lange case-Struktur geht auch.Hat sich also erledigt,
wobei, wurmt ich ja echt.
Vielleicht hat ja mal einer Lust was lauffähiges zu basteln
-
Darf man hier net mal ein bissel nachdenken mehr von den Postern erwarten??
class KWizz { public: KWizz(int language); ~KWizz(); private: typedef void (*KWizz::lp_AUF_VFUNKT)(void); lp_AUF_VFUNKT lpHideFunc[10]; void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void); };
Funktioniert doch OHNE Probleme!
-
Nachtrag:
void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void);
Sowas macht man eh net!!
Besser:
void showStep(int step); void hideStep(int step);
-
Original erstellt von RenéG:
**Darf man hier net mal ein bissel nachdenken mehr von den Postern erwarten??class KWizz { public: KWizz(int language); ~KWizz(); private: typedef void (*KWizz::lp_AUF_VFUNKT)(void); lp_AUF_VFUNKT lpHideFunc[10]; void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void); };
Funktioniert doch OHNE Probleme!**
ja, soweit war ich auch... (sorry)
aber weiter!
-
Original erstellt von RenéG:
**Nachtrag:void showStep0(void); void hideStep0(void); void showStep1(void); void hideStep1(void); void showStep2(void); void hideStep2(void);
Sowas macht man eh net!!
Besser:
void showStep(int step); void hideStep(int step);
**
Die "Besser-Lösung" hätte Spagetticode zur Folge:
void showStep(int step) { switch(step) { case 1: ..... break; case 2: .... break; usw... } }
da jeder Step ganz unterschiedliche Objekte nach vorn holt bzw. versteckt
die "Steps" folgen auch nicht in glatter Reihenfolge, sondern die Reihenfolge ergibt sich erst zur Laufzeit aus den eingegebenen Daten.
-
Wie weiter?
Du rufst die Funktionen einfach auf.Du musst sie natürlich auf ein Objekt aufrufen. Das geht mit dem .* oder dem ->* Operator:
(this->*lpHideFunc[i])();
btw:
Das gehört ja wohl eindeutig nach C++ und nicht nach winapi.