WinFuture-Forum.de: C++, vector und Objektpointer - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C++, vector und Objektpointer


#1 Mitglied ist offline   skelle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 793
  • Beigetreten: 15. Juli 04
  • Reputation: 0

geschrieben 04. Januar 2012 - 09:04

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 :unsure:

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 ! :)
0

Anzeige



#2 Mitglied ist offline   Mr. Floppy 

  • Gruppe: VIP Mitglieder
  • Beiträge: 4.126
  • Beigetreten: 01. Juli 08
  • Reputation: 271
  • Geschlecht:Männlich

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.
0

#3 Mitglied ist offline   skelle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 793
  • Beigetreten: 15. Juli 04
  • Reputation: 0

geschrieben 04. Januar 2012 - 12:29

Daran liegts glaube ich nicht
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 ;D
0

#4 Mitglied ist offline   TO_Webmaster 

  • Gruppe: Moderation
  • Beiträge: 3.225
  • Beigetreten: 27. März 02
  • Reputation: 82
  • Geschlecht:Männlich

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
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.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0