Welch Type wirft throw "irgendwas"; ?



  • Hallo allerseits,
    ich habe da eine paar Klassen bekommen die mit

    throw "Fehlertext";
    

    nach mir werfen. Ich wollte die Dinger jetzt mit catch(char* msg) auffangen, aber sie knallen immer gegen meinen Exception-Helm (catch(...))!
    Wenn ich die fremden Klassen auf

    throw (char*) "Fehlertext";
    

    ändere geht es!
    Welchen Type muss ich den da fangen???
    Vielen Dank!
    Peanut

    PS: OS: FreeBSD CC: gcc32 Zustand: Müde



  • das kommt davon, wenn man const-correctness nicht versteht (oder zu müde ist ;))

    #include <iostream>
    using namespace std;
    
    int main() {
      try {
        throw "const";
      }
      catch(const char *str) {
        cerr << str << endl;
      }
      catch(...) {
        cerr << "hmm" << endl;
      }
    }
    


  • Hallo,
    für alle die sich fragen, warum man zwar:

    char* p = "Hallo";
    

    schreiben kann, ein "Hallo" sich aber nicht mit einem catch(char*) sondern ausschließlich mit einem catch(const char*) fangen lässt.
    Das liegt daran, dass für Stringliterale die in einem throw-Ausdruck auftauchen, *niemals* die spezielle (und als deprecated eingestufte) Konvertierung von array-of-const-char (der Typ eines Stringliterals) nach char-pointer berücksichtig wird.
    In diesem Punkt unterscheidet sich z.B. ein normaler Funktionsaufruf von einem throw-Ausdruck.

    [ Dieser Beitrag wurde am 13.06.2003 um 00:08 Uhr von HumeSikkins editiert. ]



  • Viiiiiiieeeeeeeeeelen Dank!
    Ihr glaubt ja nicht wie viele FALSCHE Beispiele im Netz liegen! Googelt mal 'throw "catch(char'... und sowas nennt sich dann Tutorial...

    So, Prob. gefixed ( naja, fixen lassen 🙂 ), Zeit für die Heia!



  • Gibt es eigentlich einen bestimmten Grund dass Referenzen so selten const gefangen werden? 😕



  • Kann mir mal jemand erklären was genau man mit throew und catch und try machen kann? Das is total neu für mich.



  • stell dich nicht so dumm an, und lies ein buch :p :p


Anmelden zum Antworten