pointer will nich durch mehrere klassen



  • Die Klasse des Childfensters kennt die Variable "handelsmengeerde0" anscheinend nicht. Wenn diese Variable (wie ich annehme) zu einem anderen Fenster gehört, dann musst du dem Child-Fenster erstmal die Adresse des anderen Fenster-Objekts bekannt machen. Über diesen Pointer kannst du anschliessend auf die Variable mit dem ominösen Bezeichner "handelsmengeerde0" ( 😃 ) zugreifen.
    Am besten du übergibst im Konstruktor der Childfenster-Klasse einen Pointer auf das Hauptfenster:

    ChildFensterTyp ChildFenster(&HauptFenster);

    Dann kannst du in der Childfensterklasse auf die Elemente vom Hauptfenster zugreifen:

    DeineChildVariable = HauptFenster->Variable;



  • erstmal: thx für die antworten ^^
    "handelsmengeerde0" soll keine variable sein, sondern der pointer. kann sein dass ich das nich richtig verstanden habe, aber ich dachte man setzt den pointer ...

    handelsmengeerde0 = &m_schiff.handelsmengeerde[0];   // der pointer wird zugewiesen
    

    ... und der is dann überall im programm verfügbar, d.h. ich kann den wert der variable, auf die der pointer zeigt (also handelsmengeerde[0]), per

    m_menge1= *handelsmengeerde0;
    

    abrufen. oder? 😕

    PS @ Maxi: soll sowas wie freelancer werden (nur nich mit solch schöner graphik *gg*), man kann so ziemlich alles machen was man will ... handeln, schiffe aufmotzen, pirat spielen, aufträge erfüllen ....

    [ Dieser Beitrag wurde am 06.03.2003 um 17:24 Uhr von SirNoname editiert. ]

    [ Dieser Beitrag wurde am 06.03.2003 um 17:25 Uhr von SirNoname editiert. ]



  • Schreib mal welchen Anwendungstyp du verwendest.
    Bei Dialogen übergebe ich immer einen Zeiger der Mainklasse an den Childdialog.

    Bei SDI.Frames Hole ich mir einen Zeiger auf MainFrame.



  • ich mach ne ganz normale dialogfeldbasierte .exe .
    das mit den "übergeben von main- nach childdialog haben ja Cpp_Junky und <Maxi> auch schon gesagt ... aber wozu das? reicht der eine zeiger (der auf die variable in der übergeordneten klasse zeigt) nich aus? ich hab ja schon die .h`s dieser klassen includiert ...



  • tja ... also ich hab mich eben nochmal belesen und hab was über Referenzen gefunden. hört sich nich schlecht an und soll in manchen fällen auch besser sein als die pointer-geschichte. hab das ganze dann auch ausprobiert indem ich in der klasse, in der alle variablen anfangsinitialisiert werden, eine solche referenz "gebildet" habe. (die natürlich auch einer variable zugeordnet ist) dann jedoch kommt das altbekannte problem: wenn ich diese referenz in einer der späteren klassen verarbeiten will: unbekannter bezeichner.
    vielleicht geh ich das ganze ja auch falsch an; ich mein von einer übergeordneten klasse eine variable an eine untergeordnete weiterzugeben is nich schwer; aber ich will ja von der untergeordneten auf variablen der übergeordneten zugreifen. wenn es da noch irgendetwas besseres gibt (abgesehen mal von pointern und referenzen) sagt es mir 😃 oder: wie kann ich "von unten nach oben" auf variablen zugreifen?!



  • OK ... meine letzten 2 posts waren mehr als überflüssig ... das stand alles schonmal irgendwo da ^^ sorry.
    ich hab mir jetzt nen pointer in die obere klasse gelegt:

    Cschiff * pschiff;               // der pointer an sich
    pschiff -> handelsmengeerde[0];  // ???
    

    jetzt die frage:
    was hat in meinem codebeispiel die 2te zeile zu bedeuten? is ja, wenn ich das richtig verstanden habe, ein zeiger auf meine variable (ja, "handelsmengeerde[0]" is eine variable in Cschiff). nun mein problem: wie krieg ich diesen zeiger verwertet? ich will den wert von handelsmengeerde[0] in eine andere variable übergeben. ich hab schon herausgefunden, dass es mit

    m_irgendwas=pschiff->handelsmengeerde[0];
    

    nicht geht. aber wie dann? 😕



  • m_irgendwas muss den selben typ wie handelsmengeerde haben

    EDIT: Sorry, vertippt

    [ Dieser Beitrag wurde am 07.03.2003 um 17:13 Uhr von MaSTaH editiert. ]



  • ich arbeite bis jetz eh nur mit int`s und CString`s ...
    beide variablen haben int. .
    der code den ich gepostet habe steht in der OnCreate meiner childklasse, komischerweise nimmt er

    Cschiff * pschiff;               // der pointer an sich
    m_irgendwas=pschiff->handelsmengeerde[0];
    

    ohne meckern und fehler an (es klappt nur nich ^^), jedoch wenn ich ein UpdateData(false) drunter setze gibt es eine fehlermeldung beim ausführen des programms. 😮 😕



  • Warum rufst du eigentlich UpdateData auf. UpdateData ist dafür zuständig zwischen Control und den damit fest verknüpften Variablen zu kommunizieren ->DoDataExchange... Du brauchst es nicht jedesmal wieder aufzurufen. Was willst du überhaupt genau machen??? 🙂



  • Nochmals:

    Übergib den this denes MainDLG an die anderen Klassen.

    Und nun etwas Code:

    In allen ChildDLGKLASSEN

    // In die Header
    include "DeinehauptDLGClass.h"
    
    CDeinehauptDLGClass *m_pOwner;
    void SetOwner(CDeinehauptDLGClass * pOwner) { m_pOwner = pOwner; };
    

    In deine CDeinehauptDLGClass

    CDeinechild m_deinchild;
    // Hier Create
    
    m_deinchild.SetOwner(this);  // Übergabe des this an Childdlg
    

    Zugriff im Child auf den HauptDlg dann

    mit

    m_pOwner->hierirgeneinefunktionodervariable;
    

    Hoffe du hast es verstanden.


Anmelden zum Antworten