Anfängerfragen
-
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
-
ohne jemals echten COde deines Programms gesehen zu haben orakel ich:
Du erzugst eine lokale Variable, die dann natürlich am Ende des Scopes zerstört wird. Nun versuchst du das Problem zu lösen, indem du die Variable mit new erzeugst, aber da der zeiger auf die variable genauso kaputt geht, kommst du da nie wieder dran und erzeugst ein Speicherleck.
Nochmal der Link:
http://www.catb.org/esr/faqs/smart-questions.html
Wenn du den Link nicht verstehst: könntest du verstehen wovon du sprichst, wenn du deinen Startpost liest? Wie erwartest du hilfe? welchen Code sollten wir überhaupt schreiben?
Wenn du hilfe willst, solltest du es einfach machen, Hilfe zu geben. Es ist erstaunlich, dass du überhaupt antworten krigst, obwohl die Leute offensichtlich alle Raten müssen, wovon du sprichst.
-
kamelkacke schrieb:
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..
vector <account> kundenliste (5);
vector <account*> kundenliste (0);Warum hast du erst "5" verwendet und später "0"?
-
Wie lernst du C++? Ich sehe auch deine Threads, ich bin sicher, das Problem ist folgendes:
Leute bitte gebt mir bitte code
Du schreibst Code ab, ohne ihn zu verstehen. Die Programme in diesem Thread sind da keine Ausnahmen. Du hast bereits auf alle deine Fragen hier im Thread mehrmals Antworten erhalten, hast aber gar nicht gemerkt, dass dies die Antworten sind, die du suchst, da du deinen eigenen Code nicht verstehst. Weil du ihn nicht selber geschrieben hast. Wie soll man dir da helfen? Sollen wir dir zu jedem kleinen Problemchen eine Komplettlösung geben?
Du musst selber verstehen, was du tust. Programmieren ist nicht Copy&Paste und ein bisschen anpassen. Du musst von jedem einzelnen Zeichen in deinem Programm genau wissen, wo und warum du es setzt. Wenn du etwas nicht verstehst, musst du es nachschlagen. Stichworte wurden dir gegeben, Referenzen zum vector sind ebenfalls bekannt.
Hier ist es tatsächlich ein einzelnes Zeichen welches dein Problem verursacht (oder eher: eines deiner Probleme, andere Probleme am Code hast du noch gar nicht bemerkt), eben weil du es wohl irgendwo blind abgeschrieben hast. Du musst mindestens die Grundlagen von C++ können, sonst machen Erklärungen keinen Sinn. Und ohne dass du unsere Erklärungen verstehst, macht es keine Sinn, dir zu helfen.
-
daddy_felix schrieb:
kamelkacke schrieb:
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..
vector <account> kundenliste (5);
vector <account*> kundenliste (0);Warum hast du erst "5" verwendet und später "0"?
Wegen dem karteileichentip.
Ich schreibe nichts ab. Aber kann gut sein dass ich einiges nohlchmal nachblättern sollte...na dann.
-
kamelkacke schrieb:
Wegen dem karteileichentip.
ok. Und was passiert, wenn du es mit
vector <account> kundenliste (0);
versuchst?
-
Hat jemand mal die zeitliche Verteilung des Auftretens von blurry und kamelkacke wissenschaftlich untersucht?
-
daddy_felix schrieb:
kamelkacke schrieb:
Wegen dem karteileichentip.
ok. Und was passiert, wenn du es mit
vector <account> kundenliste (0);
versuchst?
Die Antwort wird wohl nicht die sein, die du gern lesen würdest (glaub ich)... aber es passiert genau das selbe wie mit 5.
-
EinerVonUns schrieb:
Hat jemand mal die zeitliche Verteilung des Auftretens von blurry und kamelkacke wissenschaftlich untersucht?
blurry trollt im Javaforum rum und ist sicher nicht kamelkacke. dafür ist blurry in seinem auftreten viel zu ignorant gegenüber nachfragen.