wchar_t problem
-
hallo, ich habe ein personen-verwaltungsprogramm geschrieben(eigentlich nur eine verkettete liste (na ja, ca.: 300zeilen)) und wollte das ganze dann mit der irrlicht engine (IGUIEnvironment) etwas anschaulicher machen.
leider verwendet diese zur anzeige und bearbeitung von texten variablen vom typ wchar_t.
ich hab nun schon überall im internet nach methoden zur bearbeitung dieser gesucht, aber nichts gefunden.
also wollte ich die wchar_t arrays einfach in char's konvertieren, aber das hat auch mit dem c-plusplus.net beitrag der hier irgendwo ist nicht funktioniert.BITTE schreibt doch eine kleine liste mit funktionen und include dateien, mit denen man diese wchar_t's bearbeiten kann.
(
so etwas wie:
strcpy(...);
oder:
strlen(...);
!!nur halt für wchar_t!!
)mfg. RoaN.
-
in <cwchar> findest du wcslen, wcscmp, wcscpy usw.
-
std::wstring
-
ansonsten gibt es auch den std::wstring (bzw. std::basic_string<wchar_t>), der enthält eben auch Vergleichsfunktionen etc.
<edit>
*möp* Optimizer war schneller
</edit>
-
DANKE, genau das habe ich gesucht.
Um das programm auf wchar_t umzustellen brauche ich aber noch ein ausgabe- und ein eingabe-objekt wie cout und cin.
ich habe mir schon mal das stream-system angeschaut und weiß, dass man dieses objekt wohl mit der klasse wostream erstellen kann.wostream wAusgabe; wAusgabe << L"Hallo Japan";
liefert aber fehler!!!
gibt es auch hierfür eine include-datei?
oder muss ich noch argumente an den konstruktor übergeben?mfg. RoaN.
-
schick den stream doch einfach an std::wcout.
-
dann bekomme ich immer die fehlermeldung "`wcout' undeklared (first use this".
brauche ich dafür eine include-datei?.
-
jo, <iostream>
-
SO hier jetzt der test-quellcode:
#include <iostream> using namespace std; int main() { wchar_t string[21]; wcscpy(string,L"Roman ist Cool"); wcout << string; cin.get(); return 0; }
das liefert besagte fehlermeldung.
was nun?
-
BITTTTE leute, helft mir.
ich benutze Dev-Cpp basierend auf gcc v.3... (also eine der neuen).
-
geht bei mir ohne Probleme (gcc 3.3.4)
übrigens kannst du bei wchar_t auch direkt mit den Literalen initialisieren
wchar_t string[]=L"Möp";
-
Was für einen Compiler verwendest du? Das sollte eigentlich schon gehen.
-
ich arbeite mit developer c++ version 4.9.8.0, habe es aber auch schon mit version 4 von dev-cpp versucht,
bekomme aber immer den selben fehler.
-
schau doch mal in den Header Dateien (werden in irgend einem include Verzeichnis bei deiner MinGW Installation sein), wo und ob wcout überhaupt definiert wird.
-
Ich habe die iostream datei gefunden, hier ist ein codefragment aus ihr:
namespace std { extern istream cin; extern ostream cout; extern ostream cerr; extern ostream clog; #ifdef _GLIBCPP_USE_WCHAR_T extern wistream wcin; extern wostream wcout; extern wostream wcerr; extern wostream wclog; #endif // For construction of filebuffers for cout, cin, cerr, clog et. al. static ios_base::Init __ioinit; } // namespace std
leider ändert selbst das auskommentieren von /#ifdef _GLIBCPP_USE_WCHAR_T/ und /#endif/ nichts.
-
vielleicht ist die libstdc++ Version die du benutzt ohne wchar_t Support kompiliert, du könntest jetzt zB. hingehen und mit dem Tool nm (ein Konsolen Tool, was bei MinGW dabei sein sollte) schauen ob die libstdc++ ein wcout Symbol enthält.
Ansonsten kannst du versuchen selber eine std::wcout deklaration zu schreiben oder mal _GLIBCPP_USE_WCHAR_T definieren, bevor du den Header inkludierst.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Andere Compiler verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Also im MinGW-Forum findet sich dazu auch was:
http://sourceforge.net/mailarchive/message.php?msg_id=7046369
Von devcpp ist jetzt übrigens die Version 4.9.9.0 da, die auch mit dem gcc 3.3 kommt. Aber so weit ich gesehen hab, ist dort das Problem auch noch nicht behoben. Der Beitrag vom MinGW-Forum empfiehlt, STLport zu benützen...