Hey,
ich muss für die Uni im Moment ein Projekt in C++ umsetzen bin aber etwas eingerostet in C++.
Ich habe ein 2 Dimensionales Array von Objektpointern.
Ich möchte dann in einem Vector speichern, welche von diesen Objekten ich schon "besucht" habe.
Nachdem ich den Pointer per push_back() in den Vector getan habe ändern sich allerdings sämtlich Attribute des Objekts.
Ich habe mich schon ein wenig um Netz umgesehen und gesehen, dass es wohl daran liegt das der Vector den Pointer kopiert und ich dann im Anschluss einen Pointer auf ein ungültiges Objekt erhalte
Ich habe das allerdings noch nicht so 100 %ig durchblickt.
Kann mir das jemand vllt nochmal kurz erklären und am besten einen kurzen Lösungsvorschlag geben?
Danke schonmal !
Seite 1 von 1
C++, vector und Objektpointer
Anzeige
#2
geschrieben 04. Januar 2012 - 12:27
Zitat
[...] bin aber etwas eingerostet in C++.
Da geht's mir nicht anders, aber ich versuche es trotzdem einmal. In der Doku zu vector::push_back ist folgendes zu lesen:
Zitat
Adds a new element at the end of the vector, after its current last element. The content of this new element is initialized to a copy of x.
Es wird also eine Kopie angelegt. Ich tippe mal, daß Dein Besuchervektor falsche Elementtypen hat, sprich Objekte* statt Objektpointer. Du bräuchtest so was in der Art:
vector <Object*> myVector;
Aber wie gesagt, bei mir ist das alles auch schon etwas her...
*Falls dem so ist, stimmt wahrscheinlich was mit dem Copyconstructor nicht, wenn die Objekte ins nichts zeigen.
#3
geschrieben 04. Januar 2012 - 12:29
Daran liegts glaube ich nicht
Habe schon einen Vector von Pointern.
Ein paar mehr Infos zu dem Problem hier zu finden:
http://stackoverflow...object-pointers
Wie umständlich das immer alles sein muss
std::vector<Field*> visited;
Habe schon einen Vector von Pointern.
Ein paar mehr Infos zu dem Problem hier zu finden:
http://stackoverflow...object-pointers
Wie umständlich das immer alles sein muss
#4
geschrieben 05. Januar 2012 - 19:57
Kannst du mal den entsprechenden Code-Teil hier zur Verfügung stellen? Die Frage ist nämlich, wann du auf die Objekte zugreifen willst. Legst du die Objekte evtl. nur am Stack an und versuchst dann nach Ende des Gültigkeitsbereiches darauf zuzugreifen, weil du z.B. die Pointer zurückgibst?
Im Übrigen bin ich mir Unsicher, ob ein Vector für diesen Zweck die effizienteste Variante ist (überprüfen, ob ein Objekt enthalten ist, sollte dort lineare Laufzeit haben, evtl. ist eine Map besser?). Kannst du das visited-Attribut nicht direkt in deinem Objekt speichern oder direkt am Anfang einen Vector<pair<Field*,bool>> verwenden?
MfG TO_Webmaster
Im Übrigen bin ich mir Unsicher, ob ein Vector für diesen Zweck die effizienteste Variante ist (überprüfen, ob ein Objekt enthalten ist, sollte dort lineare Laufzeit haben, evtl. ist eine Map besser?). Kannst du das visited-Attribut nicht direkt in deinem Objekt speichern oder direkt am Anfang einen Vector<pair<Field*,bool>> verwenden?
MfG TO_Webmaster
The old reverend Henry Ward Beecher
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
Thema verteilen:
Seite 1 von 1