Anfängerfragen
-
zu 1) Warum muss die Instanz überhaupt mit "new" erzeugt werden?
zu 2) Nein, da du (vermutlich) kein delete aufrufst. Das erzeugt ein Speicherleck
zu 3) wenn du die Instanzen in einem std::vector speicherst, könntest du das so machen.
-
Ok etwas editiert..aber klappt leider nicht.
Der compiler zeigt als Fehlerquelle die outputzeile der forschleife an.
"No match operator and account" (verkürzt). Blicke nicht durch..account kunde; vector <account> kundenliste (5); vector <account> :: iterator i; if (auswahl == 1) { cout << "Neues Konto wird erstellt..\n"; kundenliste.push_back (kunde); for (i=kundenliste.begin (); i<kundenliste.end (); i++) { cout << (*i) << endl; } }
-
meine Glaskugel vermutet, dass du den operator<< nicht für den Typ "account" überladen hast.
-
Erbitte inständig um code...ich kann mit der erklaerung nichts anfangen
-
Woher hast du denn "deinen" Code, wenn du selbst nicht weißt, wie er sich verhält bzw. was du falsch machst. daddy_felix hat dir sogar schon verraten, was nicht stimmt.
Edit:
Zeile 3 sorgt mit Sicherheit auch für interessante Effekte bei der Ausgabe. Bist du dir sicher, dass du wirklich 5 Karteileichen brauchst?
-
Ich kann tausende codes schreiben die nicht laufen. Das ist nicht das problem
Den compilertext zu übersetzen auch nicht. Wobei ich trotzdem für eure beteidigung sehr dankbar bin!! Ich kann nur echt nichts mit der erklärung anfangen, mir nicht das geringste darunter vorstellen
-
Was soll den deiner Meinung nach passieren, wenn du "cout << (*i) << endl;" schreibst?
Schau doch mal in dein Grundlagenbuch, was da unter dem Thema "Ausgabe benutzerdefinierter Datentypen" steht.
-
kamelkacke schrieb:
Ich kann tausende codes schreiben die nicht laufen. Das ist nicht das problem
Den compilertext zu übersetzen auch nicht. Wobei ich trotzdem für eure beteidigung sehr dankbar bin!! Ich kann nur echt nichts mit der erklärung anfangen, mir nicht das geringste darunter vorstellenDa ist Eigeninitiative gefragt. daddy_felix hat dir zwei Stichworte genannt: "operator<<" und "überladen". Wenn man das um "C++" ergänzt und mit google sucht bekommst du schon mit dem ersten Treffer ein ausführliches Tutorial.
-
Soll der operator in die klasse als public?
-
Ok, da du offensichtlich entweder nicht mit google umgehen kannst und/oder zu faul bist: C++ Operatorüberladung, Punkt 3.4.
-
Naja hab wohl grad lehrblockade. Also ich hatte den Abschnitt schon gelesen aber ist mir zu komplex...ich lass es erstmal.
Andere Frage: Mein Programm, wenn ich es starte, will sofort eine Instanz einer klasse erschaffen, auch wenn ich "account kunde" lösche.
Er macht das so lange bis ich auch die beiden vektorzeilen 3 und 4 lösche. Wie kann ich das umgehen? Will mit dem Vektor doch nur eine Liste deklarieren aber noch nichts definieren.
-
Kamelkacken schrieb:
Er macht das so lange bis ich auch die beiden vektorzeilen 3 und 4 lösche. Wie kann ich das umgehen? Will mit dem Vektor doch nur eine Liste deklarieren aber noch nichts definieren.
DocShoe schrieb:
Zeile 3 sorgt mit Sicherheit auch für interessante Effekte bei der Ausgabe. Bist du dir sicher, dass du wirklich 5 Karteileichen brauchst?
-
Ok benutze jetzt zeiger. Jetzt werden die instanzen auch nicht mehr direkt nach dem erstellen geloescht xD.
Stattdessen stuerzt das Programm ab, ach ja...woran koennte das liegen?
vector <account> *kundenliste (0); vector <account> :: iterator i; if (auswahl == 1) { cout << "Neues Konto wird erstellt..\n"; account kunde; kundenliste->push_back (kunde); }
-
kamelkacke schrieb:
Stattdessen stuerzt das Programm ab, ach ja...woran koennte das liegen?
Ok benutze jetzt zeiger.
-
vector <account> *kundenliste (0);Nur um das mal klarzustellen: Hier definierst du einen Zeiger
kundenliste, der mit 0 initialisiert wird. Kein Zeiger auf einen initialisiertenvector.Edit: SeppJ, macht Subtilität dich geil?
-
Danke ich glaub ich habs jetzt. Irgendwelche Einwände?
vector <account*> kundenliste (0); vector <account*> :: iterator i; if (auswahl == 1) { cout << "Neues Konto wird erstellt..\n"; account* kunde = NULL; kunde = new account; kundenliste.push_back (kunde); for (i=kundenliste.begin (); i!=kundenliste.end (); i++) { cout << *i << endl; } }
-
Jetzt ist die Exception Safety dahin.
Speicher einfach Accounts ohne Zeiger, nutzt den DefCtor von vector.
-
kamelkacke schrieb:
Danke ich glaub ich habs jetzt. Irgendwelche Einwände?
Du erzeugst Memory Leaks.
Bleib doch bitte dabei, dass du die Instanzen speicherst und nicht Zeiger darauf.
-
Probierst du auch aus, was du da postest?
vector <account*> kundenliste (0); vector <account*> :: iterator i; if (auswahl == 1) { cout << "Neues Konto wird erstellt..\n"; account* kunde = NULL; kunde = new account; kundenliste.push_back (kunde); for (i=kundenliste.begin (); i!=kundenliste.end (); i++) { cout << *i << endl; } }Du gibst die Zeiger aus, nicht die Kundendaten. Bei der Ausgabe hätte dir das auffallen können.
-
Weiss ich. Aber darum gehts nicht sondern ums instanzen erstellen und speichern. Erstmal.
Wenn ich ohne Zeiger arbeite stehe ich doch wieder am Anfang wo das Programm schon beim initialisieren der vectorliste ne instanz erstellen will und die direkt nach dem erstellen wieder löscht..
Und in wie fern erzeuge ich memoryleaks?
Wenn ich im destructor schreibeIf (kunde != NULL) { delete kunde; kunde = NULL; }Dann entsteht doch keins oder?
Leute bitte gebt mir bitte code ich hänge schon 2 Tage an diesen Problemen und übersehe wohl eine kleinigkeit und komme echt nicht drauf...ich mein die Instanzen werden direkt nach dem erstellen gelöscht was soll das für nen grund haben? Google sagt mir nichts