Variableninhalt verschwindet



  • Hallo.

    Nachdem ich das vorherige Problem behoben tritt ein neues seltsames Phaenomen auf. Da das Programm Klassen beinhaltet habe ich mal gepackt zum runterladen (sind nur 15kb):

    http://www.free-space.at/domeus/Autovermietung.zip

    if (Menuauswahl == 1)
    {
    	Erfolgreich = Auswahl.NeuesAuto();
    	if (Erfolgreich)
    		cout << endl << "Neues Auto hinzugefuegt." << endl << endl;
    	else
    		cout << endl << "Neues Auto konnte nicht hinzugefuegt werden." << endl << endl;
    	cout << "Bitte Taste druecken zum fortfahren." << endl;
    	//getchar();
    	cout << Auswahl.Fahrtenbuch.KennzeichenAusgeben(0) << endl;
    	cout << Auswahl.Fahrtenbuch.KilometerstandAusgeben(0) << endl;
    	cout << Auswahl.Fahrtenbuch.TankfuellungAusgeben(0) << endl;
    	getchar();
    }
    

    Dies findet ihr ein der main.cpp. Die 3 Variablen der 3 aufeinanderfolgen cout sind in der Klasse CFahrtenbuch gespeichert. Die Daten werden beim aufrufen des Menueintrags 1 (Neues Auto hinzufuegen) angelegt. Gibt man dort als Auto zb. "abc" an steht dies in der zugehoerigen m_Nummerschild bis zu dem Zeitpunkt als er in die main.cpp zurueckspringt. Dann steht nur noch Datenmuell drin. Seltsamerweise werden beim Eintragen eines neuen Autos den Membervariablen m_Kilometerstand und m_Tankfuellung auch Werte zugewiesen (10 und 0). Diese sind aber auch nach dem Ruecksprung in die main.cpp erhalten. Nur eben das Kennzeichen nicht.

    Weiss einer warum?

    Danke fuer jeden Tipp und Gruss
    Domeus



  • Und das compiliert ? 😃

    char * vergleicht man mit strcmp(const char*,const char*)
    oder man nimmt direkt std::string.
    auch kannst du es nicht mit = kopieren, sondern musst
    den speicher wieder an die richtige stelle kopieren, mit strcpy(,);
    Einzelne Zeichen vergleicht man mit 'a'.

    Devil



  • Hehe ja es compiliert 🙂

    Gut ok dann werde ich es mir doch nochmal genauer ansehen muessen. Hatte es glaub ich auch schon mit string versucht aber irgendwie gings net. Naja ich schaus mir nochmal an.

    Danke auf jedenfall fuer die Antwort.

    Gruss Domeus



  • Weil du folgendes machst:

    Erfolgreich = Auswahl.NeuesAuto();
    
    // also
    
    bool CEintrag::NeuesAuto()
    {
    	char Nummernschild[10] = "";  // Dein Nummernschild ist hier lokal
    	cout << "Neues Auto eingeben:" << endl;
    	cout << "--------------------" << endl;
    	cout << endl;
    	cout << "Nummernschild:";
    	cin  >> Nummernschild;
    
            /* Jetzt kommt dein Fehler, du übergibst nicht das array Nummernschild, sondern deine Methode Hinzufuegen akzeptiert als Parameter einen Pointer auf eine Zeichenkette */
    	bool ErfolgreichEingetragen = Fahrtenbuch.Hinzufuegen(Nummernschild);
    	return ErfolgreichEingetragen;
    }
    
    /* Das heißt du weißt hier etwas zu was nach Abarbeitung der Methode "NeuesAuto" nicht mehr existieren wird */
    m_Nummernschild[PositionNeuesAuto] = Nummernschild;
    

    Was mir aber noch aufgefallen ist, füg lieber selber Headerdateien hinzu dann kommt da auch nicht mehr diese scheisse wie

    // Fahrtenbuch.h: interface for the CFahrtenbuch class.
    //
    //////////////////////////////////////////////////////////////////////
    
    #if !defined(AFX_FAHRTENBUCH_H__69D122E2_1AF7_40F9_A2DF_12CC799075F7__INCLUDED_)
    #define AFX_FAHRTENBUCH_H__69D122E2_1AF7_40F9_A2DF_12CC799075F7__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    

    vor...

    Ansonsten glaub ich das das alles so nicht funktioniert wie du es dir denkst, mein erster Blick sagt mir das das nicht so geht wie du es später haben willst 😉 😉


Anmelden zum Antworten