Zugriff auf Funktionen in Funktionszeiger Array
-
Hallo zusammen
Mein erster post hier, ich hoffe ihr könnt mir helfen.
Ich habe da also eine Klasse mit einem Funktionszeiger Array als Member
class KlasseX : AbgeleitetVonW { public: KlasseX(); void (*_pFuncArr2[10])(Packet* packet); void DoSomething(Packet* packet); void DoSomething2(Packet* packet); };Diese Funktionen kann ich im Konstruktor auch zuweisen
KlasseX::KlasseX() { _pFuncArr2[0] = &KlasseX::DoSomething; etc... }In einer anderen Klasse habe ich nun einen Zeiger auf diese KlasseX und will eine Funktion aus diesem Array aufrufen. Dies tu ich wie folgt:
_pKlasseXZeiger->*_pFuncArr2[0](p);Dies gibt mir jedoch einen Compile Fehler:
"error C2065: '_pFuncArr2' : undeclared identifier"
Gelesen habe ich jedoch dass dies eigentlich richtig sein sollte?
Kann mir da jemand weiterhelfen?
Wäre äusserst dankbar
!!!
-
Folgendes sollte funktionieren. Ich denke das Konzept in Kombination mit Klassen zu verwenden ist nicht sonderlich schwerer. Wenn dennoch Probleme bestehen kann ich dazu auch noch ein weiteres Beispiel geben.
#include <iostream> using namespace std; template <class T> struct exec_ { void operator()(T v) { if (v) v(); } }; void f1() { cout << "f1()\n"; } void f2() { cout << "f2()\n"; } void f3() { cout << "f3()\n"; } int main() { typedef void (*func_ptr)(void); func_ptr v[3]; v[0] = &f1; v[1] = &f2; v[2] = &f3; for_each(v, v+3, exec_<func_ptr>()); }
-
class KlasseX { //... void (KlasseX::*_pFuncArr2[10])(Packet* packet); //... };(p->*_pFuncArr2[0])(p);
-
ssm schrieb:
(p->*_pFuncArr2[0])(p);(p->*p->_pFuncArr2[0])(p);
-
Danke schonmal für die Antworten
Ich habe nun also KlasseX korrigiert...
class KlasseX : AbgeleitetVonW { public: KlasseX(); void ([b]KlasseX::*_[/b]pFuncArr2[10])(Packet* packet); };Dieser Aufruf
(p->*_pFuncArr2[0])(p);führt allerdings immernoch zum selben Fehler.
Dieser Hier
(p->*p->_pFuncArr2[0])(p);führt zu folgendem Fehler:
error C2064: term does not evaluate to a function taking 1 arguments
Die Lösung von lucky_tux müsste ich noch aussprobieren, allerdings sollte es doch auch so gehen!!!
-
(p->*(p->func[0]))(10);Allerdings schluckt es der VC++2005 auch so wie camper es vorgeschlagen hat (und der muss es wissen, der hat den Standard verinnerlicht :D), also vermute ich Dein Compiler hat ne Macke.
-
camper schrieb:
(p->*p->_pFuncArr2[0])(p);
ja genau :p
renderflash schrieb:
führt allerdings immernoch zum selben Fehler.
glaube ich nicht

struct Packet{}; class KlasseX { public: KlasseX() { _pFuncArr2[0] = &KlasseX::foo; _pFuncArr2[1] = &KlasseX::foo2; } void (KlasseX::*_pFuncArr2[10])(Packet* packet); private: void foo(Packet* packet); void foo2(Packet* packet); }; int main() { KlasseX *dummy = 0; Packet *packet = 0; (dummy->*dummy->_pFuncArr2[0])(packet); }Your Comeau C/C++ test results are as follows: Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1 Copyright 1988-2003 Comeau Computing. All rights reserved. MODE:strict errors C++ In strict mode, with -tused, [b]Compile succeeded [/b](but remember, the Comeau online compiler does not link).