Return false oder throw exception



  • Tomahawk schrieb:

    bekomme ich folgende Fehlermeldung:

    Das ist nur ein Teil der Fehlermeldung. Bei templates ist das leider ziemlich mühsam, den eigentlichen Fehler zu finden. Schau mal weiter runter bis du findest, wo in deinem Code die Ursache für den fehler liegt.[/quote]



  • Deine Exception-Klasse ist ziemlich seltsam. Erstens würde ich nicht von std::exception ableiten, sondern von std::runtime_error, da dies eine spezifischere Beschreibung ist. Desweiteren musst du what() nicht überschreiben. Der Klassennamen ist ungefähr so brauchbar, wie ein

    throw "blafuh";
    

    Wie wäre es mit:

    struct my_error : std::runtime_error
    {
        explicit my_error(std::string const& what)
            : runtime_error(what)
        {}
    };
    

    Das ganze dann noch in ein hübsches Makro verpackt, falls du mehrere Exception-Klassen brauchst:

    #define DEFINE_ERROR(name, base) \
        struct name##_error : base \
        { \
            explicit name##_error(std::string const& what) \
                : base(what) \
            {} \
        };
    

    Und dann noch einen guten Namen für die Exception auswählen:

    DEFINE_ERROR(some_name, std::runtime_error)
    

    😉



  • Tomahawk schrieb:

    Nachfolgender Code ist compilierbar. Wenn ich allerdings die auskommentierten Zeilen aktiviere bekomme ich folgende Fehlermeldung:

    sstream(603): error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

    Objekte, die geworfen werden, werden immer kopiert (auch wenn du per Referenz fängst), d.h. insbesondere wird von allen nicht einfachen Membern der Kopierkonstruktor aufgerufen. Aber C++-Streams sind nicht kopierbar.


Anmelden zum Antworten