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 sogar1. : 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.