Array vom Typ Klasse?
-
Nathan schrieb:
// Erstelle ein vector von 5 ints, die mit 0 initialisiert werden. std::vector<int> vec(5); // Setze das dritte Element auf 1 vec[2] = 1; // Füge eine Element hinten an (sehr effizient) vec.push_back(3); // Lösche die ersten beiden Elemente (ineffizient) vec.erase(vec.begin(), vec.begin() + 2); // Füge vorne eine Element an (ineffizient) vec.insert(vec.begin(), 1); // Ändere seine Größe auf 2 vec.resize(2);Für weitere Funktionen, siehe hier: http://en.cppreference.com/w/cpp/container/vector
Das mit der Effizienz kannst du dir auch ganz gut merken, Anweisungen, die "aufwendiger" zu schreiben sind (wie etwas Geschichte mit begin() und sonstwas), sind Pi*Daumen ineffizient. Das stimmt natürlich nicht immer. Aber wenn du die STL mal etwas besser kennst und auch die Konzepte dahinter (z.B. Iteratoren) dann kannst du das ganz gut abschätzen.
-
Danke für die Hilfe, Vektoren scheinen perfekt geeignet zu sein.
Jedoch schaffe ich es nicht, einen Vektor vom Typ einer eigenen Klasse wie mobject an zu legen.
Obwohl Dinge wie:
mobject test; test.methode();Funktionieren

-
Es wird dir nicht viel bringen, wenn wir dir die Syntax für ein ganz spezifisches Problem zeigen, solange du die Grundlagen dazu nicht verstehst.
Wie gesagt:
Wenn du eine Physikengine schreibst, dann befasse dich bitte ernsthaft mit den zugrunde liegenden Mechanismen. Kenntnisse der STL und Datenstrukturen im Allgemeinen ist absolut unumgänglich bei einem solchen Unterfangen.
Also nimm dir ein gutes Buch und fange an, du brauchst auch viel weniger Zeit als wenn du hier alles nachfragst

-
Was heißt "schaffst du nicht"?
Fehlermeldung? Auf einmal nicht in der Lage die Tastatur zu nutzen, so sehr du es auch versuchst (dann solltest du vielleicht zu einem Psychologieforum wechseln)? Der Rechner geht immer aus? ...?
-
Zunächst ein Denkfehler

Ich bekomme jetzt den Vektor wie folgt angelegt:
std::vector<mobject> mobjects(); // Wenn ich in den '()' eine Zahl herein schreibe, erscheint die Meldung: unexpectet token `('Lass ich die Klammer leer und versuche nun in der .cpp Datei darauf zuzugreifen, bekomme ich die Meldung: '((phy*)this)->phy::mobjects' does not have class type

-
Das ist eine Funktionsdeklaration. Mach die Klammern weg.
-
Und was sollen die Klammern da, machst du das bei anderen Variablen auch?
-
Nathan schrieb:
Du musst lediglich beim Zugriff im definierten Bereich bleiben, wie sonst auch, aber ansonsten erledigt der alles für dich.
Beispiel:// Erstelle ein vector von 5 ints, die mit 0 initialisiert werden. std::vector<int> vec(5); // Setze das dritte Element auf 1 vec[2] = 1; // Füge eine Element hinten an (sehr effizient) vec.push_back(3); // Lösche die ersten beiden Elemente (ineffizient) vec.erase(vec.begin(), vec.begin() + 2); // Füge vorne eine Element an (ineffizient) vec.insert(vec.begin(), 1); // Ändere seine Größe auf 2 vec.resize(2);Für weitere Funktionen, siehe hier: http://en.cppreference.com/w/cpp/container/vector
Schreibe ich es ohne die (),
std::vector<mobject> mobjects;Bekomme ich folgende Meldung raus:
error: 'mobject' was not declared in this scope
error: template argument 1 is invalid
error: template argument 2 is invalidDurch die Meldung "'mobject' was not declared in this scope"
Habe ich folgendes gemacht:mobject mOBJECT; std::vector<mOBJECT> mobjects;Und bekomme diese Meldungen:
../phy.h:75:13: error: invalid use of non-static data member 'phy::mOBJECT'
../phy.h:76:17: error: from this location
../phy.h:75:13: error: invalid use of non-static data member 'phy::mOBJECT'
../phy.h:76:17: error: from this location
../phy.h:76:17: error: 'phy::mOBJECT' cannot appear in a constant-expression
../phy.h:76:24: error: template argument 1 is invalid
../phy.h:76:24: error: template argument 2 is invalid

-
Du hast den Header nicht inkludiert, der mobject definiert.
-
Doch, habe ich
-
Ok, beide Header verwenden die selben include guards.
-
Supercomputer schrieb:
mobject mOBJECT; std::vector<mOBJECT> mobjects;Und bekomme diese Meldungen:
../phy.h:75:13: error: invalid use of non-static data member 'phy::mOBJECT'
..

std::vector<mobject> mobjects;In die spitzen Klammern kommt der Typ.
-
Caligulaminus schrieb:
Supercomputer schrieb:
mobject mOBJECT; std::vector<mOBJECT> mobjects;Und bekomme diese Meldungen:
../phy.h:75:13: error: invalid use of non-static data member 'phy::mOBJECT'
..

std::vector<mobject> mobjects;In die spitzen Klammern kommt der Typ.
Warum funktioniert es dann bei der hervorgehenden Schreibweise nicht?
#inlcude mobject.h // Enthält die Klasse mobjectSo includiert ist?
-
#include "mobject.h"
-
Sorry, vertippt.
Im original Code steht es richtig.
Qt meckert nämlich sofort, wenn was nicht stimmt.
Fehler gefunden

Hatte in der mobject.h
auch einen #include von phy.h drinn.
Diesen entfernt und es funktioniert
Danke an alle für die Hilfe
-
Eine Frage bleibt mir da noch, wie komme ich an die Werte wieder dran?
Wenn ich z.B. die Position auf der X-Achse wissen möchte, nutze ich die Methode
long double getpositionx();
-
vector<int> vec({1, 2, 3}); assert(vec[0] == 1); assert(vec[1] == 2); assert(vec[2] == 3);
-
Ethon schrieb:
vector<int> vec({1, 2, 3}); assert(vec[0] == 1); assert(vec[1] == 2); assert(vec[2] == 3);Den Code verstehe ich gerade leider nicht

Werde da gerade 3 Variablen deklariert, die dann mit dem Index "[]" abgerufen werden?
-
Du kannst mit einem vector genauso auf die Elemente zugreifen wie beim Array auch.
Ignorier das assert.vec[0] = val; foo = vec[1];
-
Nathan schrieb:
Du kannst mit einem vector genauso auf die Elemente zugreifen wie beim Array auch.
Ignorier das assert.vec[0] = val; foo = vec[1];Das habe ich auch gelesen, deswegen verwirrt mich das "assert(vec[0] == 1);" auch etwas, was bewirkt es?