Aufruf einer Klassenmethode



  • 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 name

    Elemente[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 identifier

    Beste 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


Anmelden zum Antworten