Typäquivalenz ???



  • Tach ...

    laut meiner C++ Referenz ist wchar_t folgendermaße definiert:

    typedef unsigned short wchar_t;
    

    Wenn ich basic_fstream als template - Parameter wchar_t übergebe, erhalte ich folgende Fehlermeldungen:

    MinGW schrieb:

    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/basic_ios.h: In instantiation of std::basic\_ios<wchar\_t, std::char\_traits<wchar_t> >': C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/istream:60: instantiated fromstd::basic_istream<wchar_t, std::char_traits<wchar_t> >'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/istream:706: instantiated from std::basic\_iostream<wchar\_t, std::char\_traits<wchar\_t> >' C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:726: instantiated fromstd::basic_fstream<wchar_t, std::char_traits<wchar_t> >'
    main.cpp:6: instantiated from here
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/basic_ios.h:67: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/istream: In instantiation of std::basic\_istream<wchar\_t, std::char\_traits<wchar\_t> >': C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/istream:706: instantiated fromstd::basic_iostream<wchar_t, std::char_traits<wchar_t> >'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:726: instantiated from std::basic\_fstream<wchar\_t, std::char\_traits<wchar\_t> >' main.cpp:6: instantiated from here C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/istream:65: error: no type named \pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/istream.tcc:847: error: no type named `pos_type' in `class std::basic_istream<wchar_t, std::char_traits<wchar_t> >'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/istream.tcc:865: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ostream: In instantiation of std::basic\_ostream<wchar\_t, std::char\_traits<wchar\_t> >': C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/istream:706: instantiated fromstd::basic_iostream<wchar_t, std::char_traits<wchar_t> >'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:726: instantiated from std::basic\_fstream<wchar\_t, std::char\_traits<wchar\_t> >' main.cpp:6: instantiated from here C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/ostream:64: error: no type named \pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/ostream.tcc:404: error: no type named `pos_type' in `class std::basic_ostream<wchar_t, std::char_traits<wchar_t> >'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/ostream.tcc:420: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/istream: In instantiation of std::basic\_iostream<wchar\_t, std::char\_traits<wchar\_t> >': C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:726: instantiated fromstd::basic_fstream<wchar_t, std::char_traits<wchar_t> >'
    main.cpp:6: instantiated from here
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/istream:713: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream: In instantiation of std::basic\_fstream<wchar\_t, std::char\_traits<wchar\_t> >': main.cpp:6: instantiated from here C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:732: error: no type named \pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/streambuf: In instantiation of std::basic\_streambuf<wchar\_t, std::char\_traits<wchar\_t> >': C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:70: instantiated fromstd::basic_filebuf<wchar_t, std::char_traits<wchar_t> >'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:746: instantiated from std::basic\_fstream<wchar\_t, std::char\_traits<wchar\_t> >' main.cpp:6: instantiated from here C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/streambuf:135: error: no type named \pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/streambuf:234: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/streambuf:239: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/streambuf:574: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/streambuf:586: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream: In instantiation of std::basic\_filebuf<wchar\_t, std::char\_traits<wchar\_t> >': C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:746: instantiated fromstd::basic_fstream<wchar_t, std::char_traits<wchar_t> >'
    main.cpp:6: instantiated from here
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:76: error: no type named `pos_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:88: error: no type named `state_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:89: error: no type named `state_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:125: error: no type named `state_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:135: error: no type named `state_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:144: error: no type named `state_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/fstream:197: error: no type named `state_type' in `struct std::char_traits<wchar_t>'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/fstream.tcc:643: error: no type named `pos_type' in `class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/fstream.tcc:696: error: no type named `pos_type' in `class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >'
    C:/Programme/CodeBlocks/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/fstream.tcc:711: error: no type named `pos_type' in `class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >'

    Übergebe ich basic_fstream als template - Parameter unsigned short, erhalte ich keine Fehler. Woran liegts? Sagt die Referenz was falsches, eigentlich nich, ne?!

    thx



  • wie wchar_t definiert wird ist nicht vorgegeben. manche compiler kennen es als keyword, andere nicht. Die iostreams vom mingw können wchar_t übrigens garnicht, dafür existiert keine implementation. Wenn du stattdessen unsigned short schreibst, werden die strings trotzdem nicht als unicode ausgewertet.



  • otze schrieb:

    wie wchar_t definiert wird ist nicht vorgegeben

    Das stimmt nicht. In Standard-C++ ist wchar_t ein eigner Typ. Genau wie int oder double.

    Compiler die wchar_t lediglich als Typedef auf einen anderen Typen definieren sind in diesem Punkt schlicht nicht standard-konform.

    Btw: Für wchar_t gibt es eigene Streams, wie z.B. wcout, wcin usw. sowie eigene Stream-Typedefs, wie z.B. wfstream.



  • Tach...

    mal eine etwas wacklige These: Da DevCpp ja eigentlich für die Nutzung mit dem MinGW entwickelt wurde und wchar_t als keyword highlighted, müsste folglich der MinGW wchar_t auch als build in type kennen?! Mit welchem template - Parameter werden dann eigentlich die w - Streams spezialisiert?

    otze schrieb:

    Wenn du stattdessen unsigned short schreibst, werden die strings trotzdem nicht als unicode ausgewertet.

    Warum?



  • mal eine etwas wacklige These: Da DevCpp ja eigentlich für die Nutzung mit dem MinGW entwickelt wurde und wchar_t als keyword highlighted, müsste folglich der MinGW wchar_t auch als build in type kennen?! Mit welchem template - Parameter werden dann eigentlich die w - Streams spezialisiert?

    der mingw kennt keine wchar_t iostreams, versuch mal wcin wcout wifstream oder wofstream zu verwenden, das klappt nicht.

    Warum?

    locales sind anders

    //edit um genau zu sein, sind die locales dafür nicht spezialisiert, weshalb wahrscheinlich zur runtime eine exception geworfen wird, wenn du versuchst die op>> und op<< zu verwenden




Anmelden zum Antworten