member funktionen anderer klasse bekanntmachen



  • Hallo ich habe eine klasse a
    und eine klasse b

    in der klasse a habe ich eine protected memberfunktion

    diese möchte ich von b aus aufrufen.

    ich müsste diese ja dazu static machen. aber wenn ich diese static mache, dann

    meckert der compiler
    error C2597: Ungueltige Referenz auf ein Datenelement 'Cblabla::m_strvariable' in einer statischen Member-Funktion

    wie kann ich dennoch die funktion in b aufrufen, und arbeitet er dann auch mit der m_strvaribale ( von a )in der klasse b?

    ich möchte die fkt so aufrufen

    fkt_von_a( meinstring);



  • hoffe, dass ich etz nix falsch verstanden hab...

    evtl. so:

    a::fkt_von_a( meinstring)
    

    Aber dann darf fkt_von_a natürlich auf keine Elementvariablen von a zugreifen.

    Alternative:
    in b ein Objekt von a erstellen, und dann mit

    a.fkt_von_a( meinstring);
    

    aufrufen.

    Hierzu darf fkt_von_a allerdings nicht protected sondern public sein.

    oder b von a ableiten:

    class b : public a
    {...}
    

    in b dann:

    this->fkt_von_a( meinstring)
    

    mfg
    Martin



  • Alternativ dazu hast du die Moeglichkeiten von Zeiger auf Elementfunktionen oder
    friend.

    mfg
    v R



  • oder du benutzt das Prinzip der Friendklasse.



  • ich habs jetzt so gelöst

    z.b. klasse A

    A->die_funktion(str); / das geht

    sprich ohne friend ohne gar nichts. cool oder?



  • Ich bezweifle dass das geht. Den halben kommentar sollte der compiler nich schlucken. :p

    Allerdings versteh ich auch den rest nicht. Man sieht da garnicht was du denn nun gemacht hast. Kannst das nochmal aufklären ?



  • Ok es war in MFC

    dort habe ich eine klasse für einen dialog

    namens

    CMainFrame

    und auf dem gleichen Bildschirm noch eine andere Klasse ( auch ein Dialog )

    beide dialoge haben ähnlchen inhalt ( einer mehr, einer weniger )

    jetzt soll aber beim klicken was geschehen, egal in welchem dialog ich klicke, da sie in der listbox die gleiche ID haben.

    Jetzt hab ich die funktion in der CMainFrame geschrieben

    und aufgerufen habe ich es dann so

    // im 2ten Dialog
    
    CMainFrame->die_neue_fkt_halt(str); // so jetzt mit ganzem comment ;)
    

    die fkt hab ich jetzt doch public gemacht 👍

    Frag die c++ Gurus warum das geht. ich bin froh

    hab nichts ableiten müssen, nichts mit friend machen, einfach geil 👍

    aber 1000 dank an allen für die tipps



  • Öhm aber wenn die methode jetzt public ist, dann ist das doch nix tolles 😕


Anmelden zum Antworten