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 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 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 ofstd::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 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: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 ofstd::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 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/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 ofstd::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 ofstd::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 ofstd::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 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/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 ofstd::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
-