vector größe in klasse
-
Hi,
also ich habe das mit den vorgeschlagenen alternativen versucht, jedoch auch ohne erfolg. Ich glaube es liegt daran, das ich die größe des Vectors im Konstruktor festsetze.
Wenn ich dies herauskommentiere geht das fenster nicht zu und sowohl der systemaufruf wie auch die alternativen zur verhinderung des automatischen schließens des konsolenfensters funktioniert.
Komisch...
-
Mit diesem Konstruktor wird ein Vektor erzeugt, der n Elemente enthält. Kein Wunder, dass das kaputt geht. Ich hatte angenommen, es würde nur Platz für n Elemente reserviert. Ersetz das mal hier durch:
Punkt () { _vec.reserve (n); }
-
Hey super!! Das hat funktioniert.
Ganz ehrlich: Ich währ aufgeschmissen gewesen. Darf ich fragen, woher du solche informationen bekommst. Hast Du, abgesehen von Dir selbst, eine gute Referenz?
Ich denke das der rest jetzt einfach wird, da dieses Problem mit dem vector elementar für mein Programm war.
Vielen vielen vielen Dank für Deine Hilfe.
Wenn nicht schreibe ich wieder

Noch mal vielen Dank!
-
Ich glaub hier im Forum gibts ein paar Linklisten dafür. Ich benutze für STL-Kram (wozu auch das vector-Template gehört) die STL-Referenz auf sgi.com (einfach bei google zusätzlich zum Suchbegriff site:sgi.com eingeben, dann findet der das). Für anderes ist www.cppreference.com geeignet.
-
Ok, das schau ich mir gleich mal an.
Das mit der Erstellung der Größe des Vektors hat ja jetzt funktioniert, jedoch habe ich jetzt ein Problem mit dem Befüllen des Vektors. Wenn ich über Methoden meiner Klasse die Vectoren, wie gewohnt:
... vectorvariable[0].name="Mustername"; ...vectoren befüllen möchte, bricht mein Programm ab und verursacht einen Fehler.
Gibt es einen Unterschied zum Zugriff auf Vectoren innerhalb und über Methoden von Klassen?
Wahrscheinlich ist es wiedermal nur eine kleinigkeit und ich komm nicht drauf.
Schon mal Danke für die Antwort.
MfG
Nysander
-
Hallo
die Syntax ist grundsätzlich richtig. Dasm Problem liegt woanders. Vor allem must du sicherstelen das auch wirkliczh mindestens 1 Element im vector vorhanden ist.
Dazu fehlt aber der relevante Code und die vollständoige Fehlerbeschreibung.bis bald
akari
-
Also die Fehlerbeschreibung ist einfach nur, das das Programm, sobald ich etwas in den Vector schreiben möchte, einfach abstürzt. Konsolenfenster geht zu und es gibt eine Windows-Fehler-Meldung.
Es ist kein Syntax-Error, da ja der Compiler durchläuft; wie du schon gesagt hast.
Also der Code sieht so aus:
class Artikel { public: Artikel() { artikel.reserve(10); } //... private: vector<Artikel> artikel; string nummer; string preis; string name; string beschreibung; };Mehr ist es noch garnicht, da diese möglichkeit der Befüllung und natürlich auch das auslesen der Vectoren Hauptbestandteil meines Programmes ist.
Im Hauptprogramm Instanziere ich nur das Objekt.
Durch :
artikel.reserve(10);hab ich doch eigendlich bereits 10 Felder angelegt oder nicht?
Daher müsste es doch gehen...

-
Hallo
nein du hast mit reserve dem vector gesagt das er den Speicher für 10 Objekte vorbereiten soll! Das kannst du gerne nachprüfen, lass dir mal nach dem reserve die Werte von .size und .capacity ausgeben...
Gültoge Elemente fügst du mit assign oder push_pack ein. Steht auch alles in der verlinkten Referenz.
bis bald
akari
-
Hm... ja die Befehle kenne ich, jedoch hab ich das bis jetzt immer nur mit einem vector z.b. nur auf dem typ INT gemacht. Da konnte ich mit push_back() immer ein Element hinzufügen.
Was muss ich denn bei push_back() in die Klammern schreiben, damit ich mehrere Elemente, die ja in meinem Vector sind, reinschreiben kann?
Es gibt die Elemente: Name, Beschreibung und Nummer.
Ach ja: Wenn ich meinenvector.push_back(IRGENDWAS) eingebe, sagt der Compiler, das "push_back" kein Element von meinvector ist.
Was mach ich denn da falsch?
-
Hallo
dazu benutzt du die erste Variante von assign.
Das mit dem push_back sollte funktionieren. Bist du sicher das meinvector wirklich ein std::vector ist?
Brich den Fehler mal auf ein Minimalbeispiel herunter und poste hier den Quellcode.bis bald
akari
-
Hi, also der Fehler lässt sich leider nicht minimieren. Der Fehler ist schon "elementar".
Hier mal der Komplette Quell-Code, macht noch gar nix, soll nur halt nen Vector erstellen in der Klasse und ein Element hinzufügen.
class Artikel { public: Artikel() { artikel.reserve(10); artikel[0].name="Test"; } private: vector<Artikel> artikel; int position; string nummer; string preis; string name; string beschreibung; }; int main(void) { Artikel Artikel1; system("pause"); }Wenn ich
artikel[0].name="Test";herausnehme bzw. auskommentiere, stürzt das Programm nicht ab. Also geht die größenreservierung glatt, jedoch der Zugriff auf ein Element von meinem vector bzw. die befüllung nicht.
Ich hoffe ihr wisst was ich meine.
Danke
-
Hallo
das habe ich dir doch schon gesagt, das mit dem Reserve keine Elemente erschaffen werden, sonder nur der Platz im voraus!
artikel.assign(10, Artikel());Übrigens bekommst du so mit deiner Klasse einen schönen Stacküberlauf.
Weil du in dem Konstruktor von jedem Artikel 10 weitere Artikel erstellen willst, die jeder wieder zehn Artikel erstellen...bis bald
akari
-
Bist du dir sicher, dass wirklich jeder Artikel 10 andere Artikel hat? Ich würde mal sagen, dass das logisch falsch ist. Was willst du (damit) erreichen?