vector mit pointern in struktur
-
Hi,
ich habe folgendes Problem:
ich möchte gerne in einer Struktur-Klasse, die ich angelegt habe, einen Vector benutzen, der die Adressen weiterer Objekte dieser Strukturklassen beinhaltet.
Den Vector moechte ich benutzen, weil erst zur Laufzeit festgestellt wird, wieviele Adressen abgespeichert werden sollen.
In meiner Klassenstruktur habe ich den Vector wie folgt definiert:std::vector<structur*> name;
Die Klasse konnte ich auch compilieren. Nun weiß ich aber nicht, wie ich dieses "Feld vom Hauptprogramm aus füllen kann.
Ich habe auch dort solch einen vector definiert. Jetzt dachte ich, ich fülle ihn mitv.push_back;
und übergebe ihn dann an die Funktion. Das tut aber nicht. Aber ich kann die Struktur auch nicht mit
(*name).pusch_back(neue Adresse);
aufrufen.
Ich würde mich freuen, wenn mir jemand helfen kann.
Danke Euch
-
anfaenger_frage schrieb:
ich möchte gerne in einer Struktur-Klasse, die ich angelegt habe, einen Vector benutzen, der die Adressen weiterer Objekte dieser Strukturklassen beinhaltet.
Den Vector moechte ich benutzen, weil erst zur Laufzeit festgestellt wird, wieviele Adressen abgespeichert werden sollen.Hier ein Beispiel ohne inneren vector (innen kann man es genauso handhaben)
#include <vector> #include <iostream> #include <algorithm> using namespace std; class ding { public: ding() {cout << "ding gemacht" << endl;} ~ding() {cout << "ding entfernt" << endl;} }; class EntferneEs { public: template<typename T> inline void operator()(T* x) {delete x;} }; int main() { vector<ding*> dinge; for(int i=0;i<5;++i) dinge.push_back(new ding()); for_each(dinge.begin(), dinge.end(), EntferneEs()); cin.get(); }
-
Vielen Dank,
ich schaue mal, ob ich damit zurecht komme. Bin mir gerade nicht so ganz sicher, ob ich alles verstehe, aber ich versuche es mal.
Vielen Dank
-
Ich glaube, ich habe es nicht richtig kapiert. Zumindest funktioniert es einfach nicht.
Ich habe unten mal meine Programmfragmente aufgelistet, irgendwie mache ich was grundsätzliches falsch.class structclass { public: std::string name; std::vector<structclass*> zeiger_auf_structclass; structclass(); // Konstruktor structclass (std::string, std::string, double, std::vector<structclass*>); ~structclass(); // Destruktor };
Dann habe ich einen Default_Konstructor definiert
//Default Konstruktor structclass() : name(""), zeiger_auf_structclass(0) { }
zeiger_auf_structclass(0)
ist aber eigentlich nicht richtig zum Wertezuweisen an einen Vector. Es lässt sich so zwar kompilieren, aber kann doch
nicht richtig sein... Wie mache ich das richtig?
Und einen, der die übergebenen Parameter als Eingabe verwendet:
//Konstruktor mit Eingabe structclass(std::string n, std::vector<structclass*> z) : name(n), zeiger_auf_struct(z) { }
Wie übergebe ich hier meinem Vector einen Wert?
zeiger_auf_struct(z)
wird zwar kompiliert, aber kann wie oben ja eigentlich nicht richtig sein, wenn man einem Vector einen Wert übergeben will.
zeiger_auf_struct.push_back(z)
funktioniert aber nicht.
Oder definiere ich einen zweiten Vector und übergebe diesen an den in der Klasse? Das heißt, ich fülle ihn im Hauptprogramm mit
Werten und übergebe dann den Stack an die Struktur. Aber wie mache ich das dann?
zeiger_auf_struct.push_back(WERT)
ist ja ganz andere Syntax als die Wertübergabe bei
name(n)
im Konstructor wie ich es in der Literatur finde...
Und beides bekomme ich nicht zusammen.int main (int argc, char *argv[]) { std::vector<structclass*> zeiger_vector; zeigervector..push_back(new structclass()); structclass testobjekt("name"test" , zeiger_vector); }
Funktioniert aber auch nicht.
Der Befehlzeigervector.push_back(new structclass());
Oder auch zeigervector.push_back(0); gibt eine Fehlermeldung "undefinierte
Referenz".
Auch(zeigervector).push_back(0);
hilft nicht.
Ich hoffe, mir kann jemand helfen und ich hoffe, meine Fall-Beschreibung war nicht zu kunfus.
Danke schon mal
-
Kann mir keiner helfen?
Ich weiß wirklich nicht weiter, habe keine Ahnung, was ich noch probieren kann.
-
Wenn du auf das Objekt, dass du dem Vector hinzufuegst zugreifen willst, dann solltest du dir auch das Objekt merken...
Objecttyp * pObject = new Objecttyp ();
rObjects.pushback (pObject);
pObject->insert ("Irgendwas..");
pObject = new Objecttyp ();
rObjects.pushback (pObject);
pObject->insert ("Inhalt des zweiten Objekts...");
(Bitte nicht das Löchen mit delete der Vectorelemente vergessen....)
-
Super danke,
ich schaue mal, ob ich damit weiterkomme.