Aufruf einer Klassenmethode
-
Hallo
auf jedenfall hast du die Semikolons nach den Klassen vergessen
class KlasseA { ... };bis bald
akari
-
Hi,
ich habe mal deinen Code ein wenig verändert (schönere Formartierung, fehlende Semikolons nach den Klassendefinitionen hinzugefügt, B::DoSth. durch KlasseB::Dosth. ersetzt etc.), und so geht es...class KlasseB; typedef void (KlasseB::*MethodeB)(int, int); class KlasseA { private: KlasseB *m_b; MethodeB m_m; public: void SetB(KlasseB *b, MethodeB m) { m_b = b; m_m = m; } void onUpdate() { if(m_b) { (m_b->*m_m)(0, 1); } } KlasseA() : m_b(0), m_m(0) { } }; class KlasseB { private: KlasseA Elemente[10]; public: void DoSomething(int a, int b); KlasseB() { Elemente[0].SetB(this, &KlasseB::DoSomething); Elemente[0].onUpdate(); } }; int main() { return 0; }Anyway, irgendwie hätte ich das anders gemacht

-
Hallo akari
Hast recht, die Änderung habe ich vorgenommen:) Vielen Dank
error C2276: '&' : illegal operation on bound member function expression
error C2653: 'B' : is not a class or namespace nameElemente[0].SetB(this, &B::DoSomething); // heisst es nicht erher:KlasseB? Elemente[0].SetB(this, &KlasseB::DoSomething);Beste Grüsse
Geri
-
Hallo Trundle0x7e
Super, vielen Dank!!!:) Jetzt war ich etwas zu langsam.
Du schreibst, du hättest es anderst gemacht. Mich würde deine Varinante wirkliche sehr interessieren. Wäre nett, wenn du mir sie aufzeigst.
Von einer Webseite habe ich ein Beispiel in C# mit Delegates geladen. Die Funktionsweise ist mir klar, Allerdings ist mein Code in unmanaged C++ geschrieben und ich weiss nicht ob man es auf diese Weise auch lösen könnte.
Wen es interessiert: http://thesource.ofallevil.com/germany/msdn/library/net/Delegates.mspx?mfr=true
Beste Grüsse und nochmals vielen Dank
Geri
-
Hallo,
ich nochmals.
int _tmain(int argc, _TCHAR* argv[]) { KlasseA CA; KlasseB CB; CA.SetB(&CB,&CB.DoSomething); //??? CA.onUpdate(); while (1==1) { } return 0; }Irgendwie gefällt dem Compiler Zeile 6 noch nicht. Habe schon verschiedene Varinaten probiert:)
error C2276: '&' : illegal operation on bound member function expression
Kann mir bitte einer sagen, woran es liegt? ..ich weiss.. u.a. auch an mir:)
Beste Grüsse
Geri
-
statt . ::

-
Hallo und vielen Dank für Deine rasche Rückmeldung
Das habe ich auch versucht, erhalte aber mit:
CA.SetB(&CB,&CB::DoSomething); //???
error C2510: 'CB' : left of '::' must be a class/struct/union
error C2065: 'DoSomething' : undeclared identifierBeste Grüsse
Geri
-
KlasseB::DoSth

-
WOW!!! Super, vielen Dank!!! Ihr seid Spitze

Nun würden mich nur noch interessiere wie du dieses Problem gelöst hättest:)?
Beste Grüsse und nochmals vielen Dank für die rasche Hilfe
Geri
-
Wenn du willst, dass eine bestimmte Methode bei einer bestimmten Klasseninitalisierung aufgerufen wird, hätte ich das einfach so gemacht...
#include <sstream> #include <string> #include <iostream> #include <vector> using namespace std; class CClassB; class CClassA { friend CClassB; private: void OnInitByB(const string& sArgument) { cout << __FUNCTION__ << " sArgument==" << sArgument << endl; } }; class CClassB { private: vector<CClassA*> m_As; public: ~CClassB() { for(vector<CClassA*>::iterator pA=m_As.begin(); pA!=m_As.end(); pA++) { delete (*pA); } } void AddNewA() { stringstream ssArgument; ssArgument << "Das Argument von Instanz Nr. " << m_As.size(); m_As.push_back(new CClassA()); m_As.back()->OnInitByB(ssArgument.str()); } }; int main() { CClassB B; B.AddNewA(); B.AddNewA(); B.AddNewA(); B.AddNewA(); return 0; }
-
Geri schrieb:
Von einer Webseite habe ich ein Beispiel in C# mit Delegates geladen. Die Funktionsweise ist mir klar, Allerdings ist mein Code in unmanaged C++ geschrieben und ich weiss nicht ob man es auf diese Weise auch lösen könnte.
Das ist ev. interessant für Dich: Delegates in unmanaged C++
oder das oder das
oder einer der anderen Links, die mein Freund hergibt
-
Hallo zusammen
@Trundle0x7e: Sehr interessant, vielen Dank, dass du mir Deinen Lösungsweg ausführlich aufgezeigt hast. Das sieht sehr übersichtlich und kurz aus!
@1310-Logik: Vielen Dank für Deinen Hinweis. Das Thema Delegates interessiert mich wirklich sehr, weil ich glaubh, dass man mit der Technik sehr viele Möglichkeiten hat.
Beste Grüsse und nochmals vielen Dank für Eure sehr kompetente Hilfestellung
Geri