Anfängerfragen



  • 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 vorstellen

    Da 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.


  • Mod

    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);
    	}
    

  • Mod

    kamelkacke schrieb:

    Stattdessen stuerzt das Programm ab, ach ja...woran koennte das liegen?

    Ok benutze jetzt zeiger.


  • Mod

    vector <account> *kundenliste (0);
    

    Nur um das mal klarzustellen: Hier definierst du einen Zeiger kundenliste , der mit 0 initialisiert wird. Kein Zeiger auf einen initialisierten vector .

    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 schreibe

    If (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"?


Anmelden zum Antworten