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"));
    

Anmelden zum Antworten