Aufruf einer Funktion aus Klasse



  • Hey, aber bei der Webadresse braucht man wohl nicht mehr großartig Fragen stellen - oder? 😃

    Nungut, ich gebe zu die letzten Zeilen des Posts garnicht mehr gelesen zu haben...*schäm*
    Aber immerhin hast du's jetzt! ^^



  • MAG schrieb:

    Hey, aber bei der Webadresse braucht man wohl nicht mehr großartig Fragen stellen - oder? 😃

    Nungut, ich gebe zu die letzten Zeilen des Posts garnicht mehr gelesen zu haben...*schäm*
    Aber immerhin hast du's jetzt! ^^

    Möchte dich ja ungern kritisieren,

    aber wenn ich mir die letzten 10 - 15 Beiträge von dir ansehe, die sind alle nicht sehr hilfreich oder überlegt. Hauptsache auch was geschrieben, da muss ich IcemanX recht geben.

    Bin ausserdem der Meinung solche User mit solchen Anworten machen gute Forums wie dieses Kaputt und nehmen Anfängern den Mut.

    Die Moderatoren der Forums sollten sich echt mal gedanken machen ob solch Leute echt gewünscht sind!!!!!!!!!!



  • 🙂 NetGost

    Hallo,
    weiß vielleicht nun noch einer wie ne Methode als Callback auf gleiche weise übergeben wird!!!!!



  • #include <iostream>
    
    using namespace std;
    
    class Test
    {
    public:
    
      void callback1()
      {
        cout << "callback1" << endl;
      }
    
      void callback2()
      {
        cout << "callback2" << endl;
      }
    
      void doCall( void (Test::*memFun)() )
      {
        (this->*memFun)();
      }
    };
    
    int main()
    {
      Test t;
      t.doCall(&Test::callback1);
      t.doCall(&Test::callback2);
    }
    

    Ich hoffe du siehst dass du immer ein konkretes Objekt brauchst um die Methode aufrufen zu können!!!!!!!!!
    Davon ab: mehr als 13 Ausrufungszeichen für eine Aussage sehen nicht sehr toll aus, auch wenn du meinst sie sei sehr wichtig!!!!!!!
    Und für Fragen reicht eigentlich auch ein schlichtes Fragezeichen!!!!!!!



  • Vielen Dank 🙂



  • NetGost schrieb:

    Bin ausserdem der Meinung solche User mit solchen Anworten machen gute Forums wie dieses Kaputt und nehmen Anfängern den Mut.

    Was will man da mehr antworten als "Benutze Funktionszeiger siehe function-pointer.org" ?

    Ist eine super hilfe, da der OP nun weiß wonach er suchen muss und gleich eine ausführliche doku vorgesetzt bekommen hat. auf sowas laesst sich aufbauen.

    Code hinklatschen bringt hier nichts, weil der OP einfach den code ummodelt und dabei nix lernt.



  • Vielen Dank

    Aber wie macht man es wenn man an eine Klassen - Methode eine X beliebige Methode übergeben will.

    Hier eine Gedankennotiz als Beispiel

    Klasse TXYZ hat ne Methode TuWas nun möchte ich an die TuWas als Parameter eine X beliebige Methode einer anderen Klasse als Callback übergeben

    finix schrieb:

    #include <iostream>
    
    using namespace std;
    
    class Test
    {
    public:
    
      void callback1()
      {
        cout << "callback1" << endl;
      }
    
      void callback2()
      {
        cout << "callback2" << endl;
      }
    
      void doCall( void (Test::*memFun)() )
      {
        (this->*memFun)();
      }
    };
    
    int main()
    {
      Test t;
      t.doCall(&Test::callback1);
      t.doCall(&Test::callback2);
    }
    

    Ich hoffe du siehst dass du immer ein konkretes Objekt brauchst um die Methode aufrufen zu können!!!!!!!!!
    Davon ab: mehr als 13 Ausrufungszeichen für eine Aussage sehen nicht sehr toll aus, auch wenn du meinst sie sei sehr wichtig!!!!!!!
    Und für Fragen reicht eigentlich auch ein schlichtes Fragezeichen!!!!!!!



  • 😕



  • IcemanX schrieb:

    😕

    Könntest du bitte in vernünftigen Worten sagen was du willst? Mach nicht immer diese Confused-Smilies ohne Text.



  • Ich suche immer noch nach einer Antwort für mein Problem, aber du scheinst keine zu haben 😞

    also so geht es schon mal nicht !

    m_LL->m_fDefineVariable = &TForm1::DefVar;
    

    😡



  • Wenn X beliebige Methode heist, beliebige Klasse, beliebiger Rückgabewert und beliebige Parameter dann siehts nicht gut aus.
    Hast du denn überhaupt keinerlei Restriktionen für die Callback-Funktion ?



  • Sorry versteh ich nicht ganz....

    Also ich erkläre es mal so m_LL ist Zeiger auf ne Klasse diese Klasse hat z.B. eine Instanzvar. die m_fDefineVariable heist, dieser möchte ich nun z.B. die Methode DefVar aus TForm1 zuweisen, so das ich diese wiederum innerhalb einer Methode von der Klasse m_LL ausführen kann und somit so ne Art Callback habe.

    Wäre sehr um ein kleines Code Beispiel mit Kommentaren dankbar! 🙂

    m_LL->m_fDefineVariable = &TForm1::DefVar;

    Chew-Z schrieb:

    Wenn X beliebige Methode heist, beliebige Klasse, beliebiger Rückgabewert und beliebige Parameter dann siehts nicht gut aus.
    Hast du denn überhaupt keinerlei Restriktionen für die Callback-Funktion ?



  • Also ich nehme mal an das Methoden in deinem Sinn Funktionspointer sind.
    Dann müsste es in etwa so funktionieren wie von dir angegeben. Ich nehme mal
    an, das du möglicherweise vergessen hast das nicht statische Memberfunktionen
    alle, als ersten Parameter den this Pointer mitführen auch wenn du ihn nicht
    in der Parameterliste siehst.



  • sprich die Methode DefVar müste this haben oder wie?
    Kannst du mir mal Anhand meines Beispiels ein Beispiel geben, weis nicht genau wo ich das this unterbringen soll!

    Chew-Z schrieb:

    Also ich nehme mal an das Methoden in deinem Sinn Funktionspointer sind.
    Dann müsste es in etwa so funktionieren wie von dir angegeben. Ich nehme mal
    an, das du möglicherweise vergessen hast das nicht statische Memberfunktionen
    alle, als ersten Parameter den this Pointer mitführen auch wenn du ihn nicht
    in der Parameterliste siehst.



  • Sorry, Beispiel (getestet) geht jetzt nicht. 🙂
    Immer der erste Parameter ist ein Zeiger auf ein Objekt der jeweiligen
    Klasse.
    Wenn mein Alter mir kein Streich spielt, 😃 glaube ich das vor nicht allzulanger
    Zeit eine ähnliche Frage schon mal hier im Forum aufgetaucht ist.



  • hab unter http://www.c-plusplus.net/forum/viewtopic.php?t=98635&highlight=zeiger+klasse was ähnliches gefunden, aber ist auch nicht ganz was ich will.

    Hab jetzt mal den Header geändert siehe unten, kommt aber immer noch ein Fehler
    **
    [C++ Fehler] MainWin.cpp(23): E2034 Konvertierung von 'void (TForm1::)()' nach 'void ()()' nicht möglich**

    Header alt:

    class TListLabel
    {
    private:
       HLLJOB m_hJob;
    protected:
    
    public:
      int m_iLastError;
      void* m_fDefineVariable;
    
      TListLabel();
      ~TListLabel();
    

    Header neu:

    typedef void (*MCaller)(); 
    
    class TListLabel
    {
    private:
       HLLJOB m_hJob;
    protected:
    
    public:
      int m_iLastError;
      MCaller m_fDefineVariable;
    
      TListLabel();
    
     ...
    


  • Shade Of Mine schrieb:

    Was will man da mehr antworten als "Benutze Funktionszeiger siehe www.function-pointer.org" ?

    Du solltest dir das wirklich einmal ansehen.
    K



  • Hab ich bereits und komme nicht weiter!

    Wenn du aber weißt wie es geht dann Hilf mir doch bitte.

    Oder gehörst du zu den Forum Useren die nur denken was zu wissen und wenn es dann drauf ankommt geht es bei ihnen selbst nicht so recht. 😉

    ZuK schrieb:

    Shade Of Mine schrieb:

    Was will man da mehr antworten als "Benutze Funktionszeiger siehe www.function-pointer.org" ?

    Du solltest dir das wirklich einmal ansehen.
    K



  • IcemanX schrieb:

    Hab ich bereits und komme nicht weiter!

    Dann erkläre mal was du nicht verstehst, oder warum die lösungen dort für dich nicht funktionieren.
    K.



  • Wenn du dir mal den Eintrag etwas höher ansichts weißt du doch was ich nicht verstehe, aber hier noch mal für die lesefaulen:

    Übergabe einer Mehtode aus einer Klasse an einer Instanzvar. einer Klasse,
    wenn du nun Bahnhof verstehst solltest du weiter oben lesen!

    Auf dieser Hompage sind sehr verschiedene Fälle erklärt nur nicht dieser,
    aber aus deiner Antwort lässt sich vermuten das du dir mein Problem gar nie richtig durchgelesen hast!

    Zeig es mir doch an Hand meines Beispiels oder bist du nur ein Schwätzer???

    Als C++ Enwickler solltest du ein bischen mehr Stolz haben und es dir dadurch auch selbst beweisen. Außerdem, wo bleibt der Teamgeist und guter Wille

    ZuK schrieb:

    IcemanX schrieb:

    Hab ich bereits und komme nicht weiter!

    Dann erkläre mal was du nicht verstehst, oder warum die lösungen dort für dich nicht funktionieren.
    K.


Anmelden zum Antworten