Object, mit dem eine Funktion aufgerufen wurde in Vector speichern?
-
Frage steht im Titel

Mein Ansatz war ganz einfach so:void klasse::funktion() { Vector.push_back(this); }hm...war wohl ein bisschen naiv zu glauben, dass das so einfach funktioniert
Wir könnte man das denn sonst lösen?
-
afaik so:
void klasse::funktion() { Vector.push_back(*this); }hm...war wohl ein bisschen naiv zu glauben, dass das so einfach funktioniert

bis auf das * funktioniert es so einfach.

lg,
andi01.
-
Was für ein Objekt? Was für ein Vektor? Was für eine Funktion?
Grüssli
-
es geht zB so:
class Testklasse { public: int a; void hinzufügen(); }; vector<Testklasse> Objekte; void Testklasse::hinzufügen() { Objekte.push_back(*this); } int main() { Testklasse tk; tk.a=5; cout<<Objekte[0].a;//--> 5 wird ausgegeben -> hat geklappt }Edit: hier hatte ich übrigens die Zeile tk.hinzufügen(); vergessen

lg,
andi01.
-
andi01 schrieb:
es geht zB so:
class Testklasse { public: int a; void hinzufügen(); }; vector<Testklasse> Objekte; void Testklasse::hinzufügen() { Objekte.push_back(*this); } int main() { Testklasse tk; tk.a=5; cout<<Objekte[0].a;//--> 5 wird ausgegeben -> hat geklappt }lg,
andi01.Dann verschweig ihm aber nicht, dass eine Kopie des Objektes erstellt wird...
Ich denke er will eher den Vektor auf
std::vector<klasse*> Vector;ändern.
Dann musst du aber die Lebensdauer deiner Objekte berücksichtigen!
EDIT: Kurz gesagt: Deine Objekte sollten (i. d. R.) nicht auf dem Stack erstellt
werden. Und wenn du sie auf dem Heap erstellst, vergiss das freigeben nicht.Gruß,
XSpille
-
ok, dann eben so:
class Testklasse { public: int a; void hinzufügen(); }; vector<Testklasse*> Objekte; void Testklasse::hinzufügen() { Objekte.push_back(this); } int main() { Testklasse tk; tk.a=5; tk.hinzufügen(); cout<<Objekte[0]->a;//auch hier wird 5 ausgegebn --> passt }der code ist ja nicht viel anders, nur dass in dem fall eben keine kopie erstellt wird

allerdings bleibt da wirklich das problem mit der lebensdauer^^ also wirklich lieber auf dem Heap erstellen:
class Testklasse { public: int a; void hinzufügen(); }; vector<Testklasse*> Objekte; void Testklasse::hinzufügen() { Objekte.push_back(this); } int main() { Testklasse* tk=new Testklasse; tk->a=5; tk->hinzufügen(); cout<<Objekte[0]->a;//auch hier wird 5 ausgegebn --> passt //Objekt wieder freigeben: delete tk; Objekte.pop_back(); }lg,
andi01.
-
Wie wäre es einfch mal zuerst darauf warten, dass meine Fragen beantwortet werden, statt da wild Code in der Gegend herumzuposten und wild rumzuspekulieren?

Grüssli
-
Nein da will ich gar nichts ändern

DIe Erste Antwort wars gleich