CArray zwischen 2 Klassen füllen
-
hallo,
ich habe ein CArray in Klasse a, dass in einer klasse b werte über eine schleife durch eine memberfunktion übergeben bekommt: a->neuereintrag(wert a), das einfügen erfolgt dann in neuereintrag() über CArray.Add().
das funtkioniert auch soweit, allerdings werden die werte nicht gespeichert, bei jedem aufruf hat das array wieder die grösse 0.
kann mir jemand sagen, woran das liegen könnte?vielen dank schonmal,
daniel
-
Übergibst du das Array als Referenz, Zeiger oder Wert?
Also: Zeig doch mal den Kopf der Funktion die füllt...
-
also, das ist der aufruf in klasse b:
case 5: { //Spaltentyp: maximale Transportmenge eines Gutes ViewHandle->AddNewCommodity(m_iNrOfCom, lauf); break; }
ViewHandle ist dabei ein objekt der Klasse a, die übergebenen Variablen sind einfach werte.
und das ist die funktion der klasse a, die das array füllen soll:void a::AddNewCommodity(int index, double pos) { commod* shift = new commod; shift->index = index; shift->position_max = pos; m_aCommod.Add(*shift); int test = m_aCommod.GetSize(); }
das array besteht dabei aus elementen der struct commod.
-
Hallo,
wie ist dein CArray denn definiert?
BTW würde ich die struct als Klasse implementieren.
// header class a class Commod { public: Commod(int index, double pos) : m_index(index), m_pos(pos) {} int Index() const { return m_index; } double Pos() const { return m_pos; } private: int m_index; double m_pos; }; typedef CArray<Commod*, Commod*> CommodArray; class a { public: AddNewCommodity(int index, double pos); private: CommodArray m_aCommod; }; // a.cpp void a::AddNewCommodity(int index, double pos) { m_aCommod.Add(new Commod(index, pos)); TRACE(_T("New Arraysize: %d\n"), m_aCommod.GetSize()); }
Nicht vergessen, das Array später abzuräumen.
m_aCommod.RemoveAll() löscht nicht die mit new erzeugten Objekte!
-
ist denn die implementierung entscheidend für die funktionalität? ich hab das CArray in der entsrpechenden headerdatei definiert. im prinzip funktioniert das ja auch, nur bei zugriff aus anderen klassen werden die einträge immer gelöscht. und das ist generell bei allen CArray, die ich verwende, so.