Ich habe eine Klasse namens Spring in einem Partikelsystem. Der Konstruktor wie folgt aussieht:Verweis auf Element in 2d Vektor (C++)
Spring(Particle& _a, Particle& _b);
Und ich habe einen Vektor von Partikeln und ich verwende
Spring mySpring = Spring(myParticles.at(j),myParticles.at(j+1));
in einer Schleife um eine Federkraft zwischen zwei Teilchen hinzuzufügen. Bis jetzt funktioniert alles gut. Allerdings möchte ich einen 2d Vektor von Particles verwenden. Das ist:
Spring mySpring = Spring(myParticles.at(i).at(j),myParticles.at(i).at(j+1));
Und ich bekomme keinen Hinweis auf das Teilchen. Im ersten Beispiel ändert sich das Partikel im Vektor, wenn ich das Partikel in meiner Federklasse ändere. Im zweiten Beispiel sind die Änderungen nur lokal. Wie kann ich die Partikel im 2D-Vektor ändern?
EDIT: ich versuchen, einige Dinge klar zu machen:
ich einige Partikel-Systeme haben und jeder von ihnen besteht aus einer Anzahl von Partikeln. Jedes Teilchen sollte nur mit den anderen Teilchen interagieren, die sich in demselben System wie er selbst befinden. Deshalb habe ich einen Vektor von Teilchensystemen, wobei jedes Teilchensystem ein Vektor von Teilchenobjekten ist. (Das macht den 2d Vektor). Die erste Dimension (i) ist das System, die zweite (j) das einzelne Teilchen. Die Partikel im System interagieren miteinander (kollidieren, vermeiden, was auch immer ..) und ihre Positionen ändern sich. Und der Vektor wird "aktualisiert". (Das heißt, die Referenz funktioniert).
Allerdings habe ich einen zweiten (1d) Vektor der Federkräfte. Die Federkraft wird auch verwendet, um die Positionen der Partikel zu aktualisieren. Mein Konstruktor macht folgendes:
Spring::Spring(Particle& _a, Particle& _b) {
a=&_a;
b=&_b; }
Mit a und b Particle * zu sein. Also speichere ich Zeiger auf zwei Partikel im 2D-Vektor. Eine weitere Funktion Spring.doSpring() ändert die Position der Partikel.
a->pos.x=300;
oder
a->velocity+=something..
Im ersten Beispiel, das ich geschrieben habe ich nur ein Partikelsystem verwendet und so gab es keine Notwendigkeit für einen 2D-Vektor. Und alles funktioniert gut. Die Partikel im Vektor werden aktualisiert. Aber mit dem zweiten Beispiel läuft mein Programm, aber egal was die doSpring Funktion tut, die Partikel im 2d Vektor werden nicht aktualisiert.
Wie erklärst du "myParticles"? – coelhudo
Hey, ein Tipp von http://www.drdobbs.com/cpp/184401863: "Überschreibt die Namensgebung nicht, sondern verwendet eine konsistente Namenskonvention: Es gibt nur zwei Muss-Punkte: a) Niemals" hinterhältige Namen "verwenden "diejenigen, die mit einem Unterstrich beginnen oder einen doppelten Unterstrich enthalten"; Worte von Herb Sutter und Andrei Alexandrescu – coelhudo