pointer auf listbox



  • hi, ich will im konsturktor einer klasse einen pointer auf eine listbox übergeben soll

    wie mache ich das?

    in der A.h
    CListBox m_listbox;

    in der klasse A.cpp dann

    void A( CListBox &listbox)
    {
    m_listbox = listbox;   // kann ich ja nicht so einfach zuweisen
    }
    

    wie mache ich das jetzt?



  • in der A.h
    CListBox& m_listbox;

    in der klasse A.cpp dann

    void A( CListBox &listbox)
    {
    m_listbox = &listbox;   // kann ich ja doch so einfach zuweisen ;)
    }
    

    Such die Unterschiede, so sollte es gehen, wenn ich mich nicht voll vertan habe. 🙂



  • geht nicht 😞
    kommen 2 errors sogar

    1. : error C2758 m_listbox' : muss in der Basisklassen/Element-Initialisierungsliste des Konstruktors initialisiert werden

    2. error C2582: Die Funktion für Operator ''<L_ALIGN>'' ist in '<unbekannt>' nicht verfügbar

    m_listbox ist von CListBoxEBX



  • Okay, da fehlte der Compiler. Nächster Versuch:

    void A::A( CListBox &listbox)
    : m_listbox(listbox)   // kann ich ja nicht so einfach zuweisen
    {
    }
    

    Da muss doch A::A stehen, oder?



  • die CListBox hat keinen copy konsturktor

    jetzt hab ich einfach immer einen pointer genommen

    .h
    .. *m_listbox;

    .cpp

    A::A( .. *lb)  // in der einen stand schon A::A aber hier im forum nicht :( tippfaul halt
    {
    m_listbox = lb;   // jetzt gehts, ich bearbeite damit das "orginal" objekt
    }
    

    wo ist eigentlich bei einer mfc klasse der Dekonsturktor? ich möchte wenn die klasse beendet wird, das etwas passiert. wo mache ich das? Es gibt ja kein

    CMeinDlg::~CMeinDlg // fehlt



  • Okay, an sowas hatte ich nicht gedacht, sorry.
    Mach aber eine NULL-Prüfung!

    Eigentlich müßtest du den Destruktor einfach hinschreiben können...

    Hast du das mal versucht? Sonst musst du dir die passende Nachricht raussuchen.



  • wie mache ich eine NULL prüfung?

    if( lb != NULL)     // so oder?
    {
    m_listbox = lb;    
    }
    


  • Zum Beispiel.

    Nun musst du noch irgendwie den Fehlerfall melden.

    Das einfachste wäre (für die Debugversion) ein

    ASSERT(lb);
    

    bzw. für Liebhaber der langen Schreibweise

    ASSERT( lb != NULL );
    

    🙂

    In der Release würde dann allerdings nix passieren. Falls das der Fall sein soll, musst du dir noch was einfallen lassen.


Anmelden zum Antworten