Seite 1 von 1

Problem mit vector<int> und QList<CVector>

Verfasst: 28. Juli 2008 14:17
von gentlesea
Hallo Forum,

ich habe eine Klasse CVector.h, die einen vector enthält:

Code: Alles auswählen

[...]
public:
	vector<int> listOfScatterPoints;
[...]
In einer anderen Klasse rufe ich folgenden Code auf:

Code: Alles auswählen

CVector* pMeinHeapTestVektor = new CVector();
pMeinHeapTestVektor->listOfScatterPoints.push_back(1);
int vorher = (int) pMeinHeapTestVektor->listOfScatterPoints.size();
m_listOfVertices.append(*pMeinHeapTestVektor);
CVector CVectorAusDerListe = m_listOfVertices.at(m_listOfVertices.count()-1);
int nachher = (int) CVectorAusDerListe.listOfScatterPoints.size();
Ich lege mir ein Objekt vom Typ CVector auf dem Stack an. Dieses Objekt enthält einen vector<int>, den ich in der Header-Datei der Klasse CVector (und nur dort) definiert habe.

Ich kann nun in dieses Objekt mittels push_back Werte reinfüllen. vorher liefert mir 1. Sobald ich dieses Objekt jedoch mittels append an eine QList<CVector> m_listOfVertices anhänge und dieses wieder abhole, ist der vector leer. nachher liefert mir 0. Wie kann das sein?

Versuche, das ganze auf dem Heap mittels new CVector anzulegen, haben das Problem auch nicht beseitigen können.

Was mache ich falsch?

Verfasst: 28. Juli 2008 17:20
von RHBaum
ne klasse mit nur einem oeffentlichen member ... solltest eh gleich nen struct nehmen, und ja keine methoden dranhaengen, weil mit datenkapslung und OOP hat das ja ned mehr viel zu tun ....

Nur was zu meinem verstaendniss ....
Warum willst du nen vector aufn heap legen ???
das ding frisst so wenig an speicher aufn stack, das es fast mit dem pointer selber konkurrieren kann . Ok aber nur fast :-)

Laufzeit ??? dann ist aber dein beispielcode schlecht gewahlt ...

warum castet man nen sizetype aufn int ??? eigentlich ist man froh doch schon nen unsigned typen zu haben ...
und dann auch noch mitm C-Cast ... boese boese !

m_listOfVertices.append(*pMeinHeapTestVektor);
kann das ding gescheit mit dem vector umgehen ???
wird da kopiert, oder haelt sich das ding gar nur ne referenz ?

Ciao ...

Verfasst: 28. Juli 2008 18:46
von gentlesea
Natürlich sind in der Klasse noch andere Member-Variablen. Deswegen ja auch die Aussparungsklammern ([...]). Das Problem hat sich mittlerweile gelöst. Der Copy-Constructor war noch nicht so implementiert, dass er auch die Referenz kopiert hat.

Verfasst: 29. Juli 2008 10:17
von RHBaum
Aber trotzdem ist ne oeffentliche member in ner klasse kein guter OOP Stil ...

Ciao ...