Compilerfehler



  • Deine 'bad_fromString' Klasse erbt privat von 'bad_cast', ichw eis nicht ob das der Fehler ist, aber das ist auf jedenfall nicht so gut.


  • Mod

    Skym0sh0 schrieb:

    Deine 'bad_fromString' Klasse erbt privat von 'bad_cast', ichw eis nicht ob das der Fehler ist, aber das ist auf jedenfall nicht so gut.

    schau nochmal genau hin 😉

    Auf den möglicherweise fehlenden Header wurde schon hingewiesen.



  • Sag nicht bei struct ist auch die Vererbung default public?!


  • Mod

    Skym0sh0 schrieb:

    Sag nicht bei struct ist auch die Vererbung default public?!

    Deshalb enthält tmp-code für gewöhnlich kein explizites public.



  • 😮 Okay... wusste ich nicht, aber jetzt wo du's sagst, eigentlich auch nicht mehr als logisch.



  • Alle die im lehrbuch auch eingebunden sind wurden eingebunden

    Exception
    Stdexcept
    habs auch mal mit typeinfo versucht das gibt ganz irre fehler

    Wenn ihr mir sagt welche ich brauche gucke ich aber gerne noch mal



  • #include <typeinfo> fehlt vermutlich.



  • Ich hab mir den code noch mal angesehen.
    Der Typeinfo header fehlt tatsächlich, führt aber auch nicht dazu dass das Programm kompiliert. Die genauen Fehlermeldungen habe ich gerade nicht zur Hand, da ich an einem Uni Rechner ohne Compiler sitze.

    Gefehlt hat aber wirklich eine Header-Datei. Stroustrup macht das in diesem Buch so, dass er dich ein wenig von der STL abschirmt, und seinen eigenen Header std_lib_facilities.h benutzt. Dort werden diese Header genutzt.

    #include <fstream>
    #include <iostream>
    #include <stdexcept>
    #include <string>
    #include <sstream>
    #include <boost/regex.hpp>
    

    Wenn ich mal alles rausnehme, was der obige Code sicher nicht braucht, dann stellt sich heraus, dass das kompiliert, wenn man den Boost Header inkludiert. Ohne den geht nix. Frage an die Experten: Soweit ich das sehe, kompiliert die problematische STruktur deshalb nicht, weil sie von std::bad_cast erbt. Die Funktion ist aber doch wirklich in typeinfo defniert und sicher nicht bei boost, oder? Ich bin etwas verwirrt.


  • Mod

    Um das zu beantworten, müsstest du mal die vollständige Fehlermeldung zeigen.

    Du darfst aber davon ausgehen, dass dein Compiler recht hat.



  • Erst mal ein Tipp: ein vollständiges compilierbares (bzw. in dem Fall nicht compilierbares) Beispiel ist sehr hilfreich. Ich habe das mal so zusammen kopiert:

    #include <string>
    #include <sstream>
    #include <typeinfo>
    
    struct bad_from_string : std::bad_cast
    {
       const char* what() const throw()  // überschreibe what() von bad_cast
       {
          return "Gescheiterte Umwandlung von string";
       }
    };
    
    template <class T>
    T fromstring (const std::string& s )
    {
        T result;
        std::istringstream is(s);
        if (!(is >> result)) throw bad_from_string();
        return result;
    }
    

    Und siehe da - es lässt sich übersetzen.

    Du kannst <typeinfo> offensichtlich deswegen durch <boost/regex.hpp> ersetzen, da dieser die <typeinfo> includiert.


Anmelden zum Antworten