onvertierung von 'wchar_t *' nach 'const char *' in C++ Builder 2009
-
Hallo zusammen,
ich habe mal wieder ein Problem in C++ Builder 2009:
In der Zeile
FILE* f = fopen((SaveDialogWindHisto->FileName).w_str(),"w");
bekomme ich die Fehlermeldungen
[BCC32 Fehler] ShowHistogramms.cpp(1248): E2034 Konvertierung von 'wchar_t *' nach 'const char *' nicht möglich
und
[BCC32 Fehler] ShowHistogramms.cpp(1248): E2342 Keine Übereinstimmung des Typs beim Parameter '__path' ('const char *' erwartet, 'wchar_t *' erhalten)
Wie muss ich das konvertieren, um es richtig zu machen?
Gruss
Lodo2609
-
Lodo260 schrieb:
Wie muss ich das konvertieren, um es richtig zu machen?
Binde tchar.h ein und verwende _tfopen anstelle von fopen. Gleichermaßen für andere C-Funktionen, mit denen du auf ein gleichartiges Problem stößt.
Damit das wie gewünscht funktioniert, mußt du in den Projektoptionen die Option "_TCHAR entspricht" auf "wchar_t" setzen.
-
Hallo,
leider ändert das nichts an den Fehlermeldungen, die bleiben gleich...
Gruss
Lodo2609
-
fopen erwartet const char*, also machst du's so:
FILE* f = fopen(SaveDialogWindHisto->FileName.c_str(), "w");
FileName ist ja nur ein Ansistring.
-
Zunächst solltest du sichergehen, daß du das Update 1 installiert hast.
Lodo260 schrieb:
leider ändert das nichts an den Fehlermeldungen, die bleiben gleich...
Du hast also den Switch in den Projektoptionen umgestellt, und dein Code lautet folgendermaßen:
FILE* f = _tfopen ((SaveDialogWindHisto->FileName).w_str (), "w");
?
Powerpaule schrieb:
FileName ist ja nur ein Ansistring.
Nein, in C++Builder 2009 ist System::String ein Typedef für UnicodeString, den neuen UTF-16-Stringtypen.
Dennoch rate ich dazu, die c_str()-Memberfunktion zu verwenden.
-
Hallo,
ja, Update1 ist installiert.
In Projektoptionen->Verzeichnisse und Bedingungen habe ich _TCHAR entspricht wchar_t eingestellt.
Die Codezeile habe ich mit Copy-Paste eingefügt, die Fehlermeldung bleibt...
Gruss Lodo260
-
lodo260 schrieb:
Die Codezeile habe ich mit Copy-Paste eingefügt, die Fehlermeldung bleibt...
Das kann ich nicht reproduzieren. Lediglich die umgekehrte Fehlermeldung kann ich feststellen, nämlich daß beim zweiten Parameter const char* nicht nach const wchar_t* konvertiert werden kann. Das behebst du, indem du die Zugriffsspezifikation "w" mit _T() umgibst:
FILE* f = _tfopen ((SaveDialogWindHisto->FileName).c_str (), _T ("w"));