Komplexen Datentyp in Vector speichern
-
Hi,
ich versuche einen Vector anzulegen, der als Datentyp eine Klasse "Eingabe" hat und das ganze dynamisch zu speichern. Leider geht das "delete[] Liste" nicht zum Kompilieren, da spuckt der GCC folgende Fehlermeldung aus:
type ‘class std::vector<Eintrag, std::allocator<Eintrag*> >’ argument given to ‘delete’, expected pointer*Mein Quellcode:
#include <vector> using namespace std; #include "Eingabe.h" int main() { vector <Eingabe *> Liste; Liste.push_back (new Eingabe()); delete[] Liste; Liste.clear(); }
Hab's auch schon mit:
delete[] Eingabe();
versucht, leider geht das genauso wenig.
Wüsste jemand, voran das liegen könnte? Leider bin ich bisher nichts in der Richtung in C++ gemacht und weiß nicht, was in diesem Code falsch wäre.
Auch schon gegooglet, aber da findet man meistens nur einen Vector mit einfachen Datentypen.
-
Du brauchst die Einträge im vector nicht mit new speichern. Vector übernimmt normalerweise die Speicherverwaltung auf dem HEap.
#include <vector> using namespace std; #include "Eingabe.h" int main() { vector <Eingabe> Liste; Liste.push_back (Eingabe()); Liste.clear(); }
-
Deine Version ist mir auch lieber, nur hat unser Professor gesagt, wir *müssen* mit new Speicherplatz einfordern, argumentiert hat er damit, dass man nicht weiß wieviele Einträge jetzt wirklich angelegt werden (ob 1 oder 100).
-
Dann sag deinem Professor, daß er keine Ahnung von C++ hat - das gute an den Containerklassen ist, daß dir egal sein kann, wieviel Platz du brauchst. Der vector<> zählt mit, wieviele Elemente er eingeliefert bekommt und beschafft sich selber genug Platz dafür.
PS: Wenn du unbedingt Pointer verwenden willst, mußt du auch jeden angeforderten Block von Hand wieder freigeben:
for(size_t i=0;i<Liste.size();++i) delete Liste[i];
-
@meg! Das hat damit nichts zu tun. Der Vector wächst intern autom. weiter, wenn man mit push_back seine Elemente hinzufügt. Ich bin mir sicher, das er das mit new anders meinte, denn sonst sollte er sich das Thema Vector neu reinlesen.
Das von THX ist auf jeden Fall richtig und einfacher.
Das was du machen willst, wenn du die Elemente mit new im Vector anlegen willst, sollte so sein:
#include <vector> #include "Eingabe.h" using namespace std; // nicht vor einem Include!!! int main() { vector <Eingabe *> Liste; Liste.push_back (new Eingabe()); for(int i=0; i< Liste.size(); i++) delete (Liste[i]); Liste.clear(); }
vector<Eingabe*> macht man nur, wenn man polymorphe Typen bzw. unterschiedliche Typen speichern will. Wenn du nur Eingabe-Typen speichern willst, nimmst du das von THX!!!
Aber mit der Anzahl hat das absolut nichts zu tun!
-
Ist nicht die Frage vielmehr was der Professor will?
Und ob vector dafür geeignet ist? Evtl. will der Professor ja ein normales Array haben...