Problem bei String umwandlung



  • Hallo zusammen,

    bekomme bei folgendem Code einen Fehler (siehe unten), und zwar in der Zeile

    string str_file = szFileName;
    

    .

    // Path of executable
    TCHAR szFileName[MAX_PATH+1];
    GetModuleFileName(NULL, szFileName, sizeof(szFileName) / sizeof(TCHAR));
    string str_file = szFileName;
    

    Fehlernachricht:

    C:/Daten/cplusplus/qt/struktur/struktur/codeinteractive.cpp:29: error: conversion from 'TCHAR [261]' to non-scalar type 'std::string' requested

    Hatte vormals sowas geschrieben:

    string str_file = string(szFileName);
    

    Nachdem ich Teile des Projektes in QT integriert habe, hats nicht mehr geklappt 😕 Woran mag das liegen? Unter Codeblocks hat es noch compiliert, ist beides gcc..

    Vielen Dank



  • Was ist TCHAR bei dir?



  • @ Michael
    Verstehe leider deine Frage nicht so recht. Wenn du meinst, ob das TCHAR UNICODE ist, dann ist die Antwort nein. Benötige es auch nur, um mit der Funktion GetModuleFileName den Pfad des Programmes herauszubekommen.

    Habe jetzt folgenden Code:

    wchar_t *szFileName = new(wchar_t);
        *szFileName = szFileName[MAX_PATH+1];
    
        GetModuleFileName(NULL, szFileName, sizeof(szFileName) / sizeof(wchar_t));
    
        string str_filetest = szFileName;
    
        string str_file = str_filetest.c_str();
    
        // find last \ and deliver path to str_path
        return str_file.substr(0,str_file.find_last_of("\\"));
    

    Und folgende Fehlermeldung:

    C:/Daten/cplusplus/qt/struktur/struktur/codebamfvpnrelayinteractive.cpp:41: error: conversion from 'wchar_t*' to non-scalar type 'std::string' requested

    Und wenn ich statt

    string str_filetest = szFileName;
    

    folgendes schreibe

    string str_filetest = string(szFileName);
    

    erhalte ich diese Fehlermeldung:

    C:/Daten/cplusplus/qt/struktur/struktur/projektname.cpp:42: error: no matching function for call to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(wchar_t*&)'
    

    btw: Warum ist im Beispiel von Jochen Kalmbach ( http://www.c-plusplus.net/forum/viewtopic-var-t-is-158666.html ) String großgeschrieben? Bei mir funktioniert die string Funktion und Datentyp nur, wenn sie kleingeschrieben werden. Bei Einbindung der gleichen Headerdateien!? Nachtrag: offensichtlich auch nicht immer...



  • 2Random schrieb:

    btw: Warum ist im Beispiel von Jochen Kalmbach ( http://www.c-plusplus.net/forum/viewtopic-var-t-is-158666.html ) String großgeschrieben? Bei mir funktioniert die string Funktion und Datentyp nur, wenn sie kleingeschrieben werden. Bei Einbindung der gleichen Headerdateien!? Nachtrag: offensichtlich auch nicht immer...

    Das ist eine andere Klasse (System::String) einer anderen Programmiersprache (C++/CLI) und hat nichts mit std::string zu tun.



  • @Matze Danke dir. Habe mich seit lĂ€ngerem darĂŒber gewundert...

    Und die Umwandlung von wchar_t in string funktioniert nun auch

    wchar_t szFileName[MAX_PATH] = L"";
    
        GetModuleFileName(NULL, szFileName, sizeof(szFileName) / sizeof(wchar_t));
    
        // umwandeln in wstring
        wstring str_filetest = wstring(szFileName);
    
        // umwandeln von wstring in string
        // beruecksichtigt codepage nicht
        string str_file(str_filetest.begin(), str_filetest.end());
        str_file.assign(str_filetest.begin(), str_filetest.end());
    

Log in to reply