Execption / Rückgabewert



  • Hallo alle zusammen,

    folgender Code:

    Rechnung toread;
     try
            {
              fstream file(rechnrtodatname(rechnr), ios::in|ios::binary);
              if(file.is_open())
                    file.write((const char*)&toread,sizeof(toread));
              if(file.bad())
                    throw "Fehler beim lesen der Datei";
              return(toread);
            }
     catch(...)
            {
    
            }
    

    Ich würde gern in den Catch(...) Body sowas wie ein return(NULL) schreiben.
    Leider erwartet er einen Rückgabewert vom Typ Rechnung. Wenn aber was schief geht darf ich kein ungültiges Objekt zurückgeben. Vorschläge?



  • wer erwartet einen rückgabewert vom typ rechnung?
    der catch-block? wieso?

    oder gibt diese funktion eine rehcnung zurück?



  • Entschuldige.
    Mein Fehler.

    Die Funktion gibt ein Objekt von Typ "Rechnung" zurück.



  • dann wirf doch die exception durch:

    //im Catch-Block der Funktion
    
    throw //irgendwas, text, zahl
    
    //und wo die funktion verwendet wird:
    
    Rechnung myRe;
    try
    {
     myRe = DeineFunktion();
    }
    catch(//das was du eben wirfst)
    {
      //deine Behandlungsroutine
    }
    


  • Hier der ganze code.

    Rechnung open_bill(unsigned int rechnr)
    {
     Rechnung toread;
     try
            {
              char datname[15];
              rechnrtodatname(rechnr,datname);
              fstream file(datname, ios::in|ios::binary);
              if(file.is_open())
                    file.write((const char*)&toread,sizeof(toread));
              if(file.bad())//Wenn letzter Zugriff schief ging
                    throw "Fehler beim lesen der Datei";//Msg_Box und ab zu catch(..)
              return(toread);//Wenn alles ok
            }
     catch(...)
            {
              //Was soll nun hier stehen?? Das Programm soll nicht abstürzen oder sich selbst beenden
            }
    }
    

    Ich versteh deine Antwort nicht. Formuliers mal anders, bitte.



  • Wozu verwendest du hier überhaupt einen try/catch-Block? Lass den in deiner Funktion weg und machen einen um den Aufruf dieser Funktion.
    Als Alternative könntest du hier auf Exceptions ganz verzichten und die Funktion ein bool zurückgeben lassen ob sie erfolgreich war. Deine Rechnungs-variable übergibst du als referenz.
    [edit]
    Bist du sicher, dass du hier etwas schreiben und nicht doch etwa lesen willst? [edit]



  • Ja ich will lesen, ich will Feierabend...

    Boah sorry Jungs. Schon wieder mein Fehler. Ich will lesen. Keine Ahnung wieso ich den Falschen Body genommen hab.



  • Also mal ein Beispiel, wie ich das machen würde.

    bool open_bill(Rechnung& toread, unsigned int nr)
    {
         char datname[15]; // Vielleicht besser ein string?
         rechnrtodatname(nr,datname); //Was macht das?
         fstream file(datname, ios::in|ios::binary);
         if(file.is_open())
               file.write((const char*)&toread,sizeof(toread));
         return !file.bad();//Wenn letzter Zugriff schief ging
    }
    

Anmelden zum Antworten