Membervariablen von einer Klasse in eine andere durchreichen



  • Hi Neo,

    aber hallo bzw. "but hello", wie der Engläner sagen würde😕...

    Aber du willst doch an SetDlgPointer die aktuelle Instanz von deinem CBenutzer- Objekt übergeben.

    Wie hast du denn SetDlgPointer in Password_aendern deklariert? Richtig wäre dann

    SetDlgPointer(CBenutzer* pBenutzer);
    

    Und du musst "benutzer.h" in deiner Password_aendern- Klasse einbinden(<- warum fehlt da eigentlich das "C"?). Dann sollte das auch laufen oder ich habe das völlig falsch verstanden, was du vor hast.

    Ich habe mal eine Art Beispiel gemacht. Password_aendern heißt bei mir CSetPwd.

    //im Header- File von CSetPwd
    class CBenutzer;
    
    class CSetPwd
    {
        ...
    private:
        CBenutzer* m_Benutzer;
    public:
        void SetDlgPointer(CBenutzer* aBenutzer);
        ...
    }
    
    //im CPP- File von CSetPwd
    #include "Benutzer.h"
    
    void CSetPwd::SetDlgPointer(CBenutzer* aBenutzer)
    {
        m_Benutzer = aBenutzer;
    }
    
    /*und der Aufruf dann so wie du ihn hast 
      im CPP- File von CBenutzer*/
    ...
    CSetPwd setPwd;
    setPwd.SetDlgPointer(this);
    setPwd.DoModal();
    ...
    

    Grüße, Volle.



  • Warum machst du es nicht einfach so wie ich es beschrieben habe ?

    Volle:

    Was du ihm die ganze Zeit erklärst ist nichts anderes als meine Beschreibung.
    ( Übergebe this-Zeiger an Klasse die damit arbeiten kann.)



  • @Unix- Tom:

    Ja klar. Aber irgendwie bekommt es Neo nicht hin 😕 ...

    Vielleicht kannst du es ihm ja beibiegen?

    Gruß, Volle.



  • Hallo Leute,

    Ich danke euch erstmal, dass ihr euch solche Mühe gebt, mir das Thema verstäntlich zu machen. Ich verstehe auch um was es geht(halbwegs zumindest).Ich hatte das schon mal theoretisch im Rahmen meiner Ausbildung. Aber leider nicht an solchen Beispielen.Deshalb bin ich euch sehr dankbar, dass ihr hier mit so einer Engelsgeduld rangeht und erstmal keinen für sein Unwissen verurteilt(da wäre ja auch das Forum sinnlos).Das Problem ist nämlich, dass es sich bei meinem Programm um eine Projektarbeit handelt, die im Rahmen eines Praktikums angefertigt werden muss(welche dann natürlich Prüfungsvorausetzung ist). Und um das einigermaßen sauber über die Bühne zu bringen, bin ich gezwungen auf solche Sachen wie "globale Variablen" und all das Zeug, was man als guter C++Programmierer nicht verwendet, zu verzichten.Da die Stoffdichte in der Ausbildung sehr hoch ist, sind die Dozenten gezwungen, an der Zeit zum Üben zu sparen.Verständlich! Aber dann bleiben solche, ich sag mal "kniffligen" Sachen, wie klassenübergreifende Variablenverwendung, irgendwo auf der Strecke.
    Und wie soll man es anders Lernen, als es sich irgendwo abzugucken(das machen selbst die Primaten so), denn nur so wrid das Ganze effektiv. Genauso problematisch is die Tatsache, dass das Thema MFC erst nach dem Praktikum behandelt wird, ich es aber jetzt brauche, da der Praktikumsbetrieb das als mehr od. weniger effektiv erachtet. Nur das sich keiner damit auskennt. Nicht einmal die Dotzenten können einem weiterhelfen. Fazit: Ich besorgte mir das einzig gute Buch, was es in dieser Richtung gibt und hab mich reingearbeitet, mit relativ guten Fortschritten weitergemacht und nu is zick. Jetzt kam nur noch ein Board in Frage.

    Also deshalb hier noch eine Frage:
    Wieso kennt er meine Membervar immer noch nicht. Ich hab´s wirklich haargenau so gemacht, wie oben beschrieben, hab noch mal die Headerdateien überprüft, die Namen, die Deklarationen, und trotzdem is diese besch...ene Membervar 'm_benutzernamen' ein "nicht deklarierter Bezeichner". Wenn ich den Pointer auf die Klasse gesetzt hab, wo sich diese Membervar befindet, dann kann ich doch so darauf zugreifen, oder?

    pm_benutzer->m_benutzernamen.GetLBText(m_benutzernamen.GetCurSel(),bName);
    

    'pm_benutzer' is der Zeiger auf die "fremde" Klasse.
    Und wenn ich das so compiliere gehts:

    pm_benutzer->m_benutzernamen;
    

    Aber wahscheinlich nur, weil er da noch ni richtig auf m_benutzernamen zugreift, oder?
    Ich verier bald die Nerven bei dem Prog!Das raubt mir ja schon den Schlaf. Wenn das die Bestimmung eines Programmierers ist, dann muss ich mir das alles noch einmal anders überlegen. 🙄



  • Stell mal deinen Source Online und ich werde ihn mir ansehen.



  • Hallo Unix-Tom,

    [url]http://sisco.kicks-ass.net/~scipy/Modulverwaltung.exe [/url]
    sind aber noch Sachen drin, die ni ganz sauber programmiert sind, wo ich aber wegen Zeitmangel momentan noch nix anderes programmiert hab. Naja egal schau´s dir mal an... 🙂



  • Kann es sein das der Link nicht funzt ?

    Zumindest von TDSL nicht

    Allerdings komme ich auf www.pcwelt.de auch nicht. Sonst geht alles.
    Check mal deinen Server



  • @Unix-Tom

    Hallo Thomas,
    Äh, ja der Server is grad down(gestern ging´er noch), versuch´s mal unter "highendzone.host.sk/Modulverwaltung.exe" das sollte funzen! Und danke, dass du die die Zeit nimmst.



  • ändere mal

    m_benutzernamen.GetCurSel()
    auf

    pm_benutzer->m_benutzernamen.GetCurSel()

    wenn du schon auf eine andere Klasse zugreifst dann mit beiden

    pm_benutzer->m_benutzernamen.GetLBText(pm_benutzer->m_benutzernamen.GetCurSel(),bName);



  • @ Unix-Tom

    Jetzt funzt´s! 😃 Is ja eigentlich logisch, aber manchmal ist man bei der Problemlösung ganzschön vernagelt. 🙄
    Also goßes Dankeschön nochmal.


Anmelden zum Antworten