[gelöst] Probleme mit wcout, wstring etc



  • Habe folgenden Code (gekürzt):

    void write(wstring text)
    {
        wcout << text;
    }
    
    int main()
    {
        write(L"ü");
    }
    

    VS kann nicht von einem wide char Array zu einem wstring konvertieren. Aber das Gleiche geht mit chars und strings.



  • Doch, kann VS, wie wahrscheinlich jeder anderen C++ Compiler auch.

    Beschreib dein Problem genauer! Wird dein "Ü" nicht richtig auf der Konsole dargestellt? Das ist kein VS Problem, sondern ein Windows Problem (https://www.c-plusplus.net/forum/343499).

    Edit: Zu blöd Windows richtig zu schreiben.



  • Genau den Code mit iostrameam und string includet hab ich aber unter VS Windows und g++ android geschrieben. Die Meldung von g++ war komplett komisch, aber die Windows Meldung hat genau das angezeigt.



  • Dann zitier doch mal die Meldung und paste hier Code rein, den du so versucht hast zu kompilieren und auszuführen.

    Ich habe deinen Code um Includes und Namespace erweitert und mit VS2015 ausgeführt. Funktioniert ohne Probleme.

    Edit: Abgesehen von der Darstellung in der Konsole.



  • Auf android hatte ich den Namespace vergessen. Ich hatte bei meiner Fehlersuche nicht daran gedacht, dass es daran liegen könnte. 🙂 Bei VS guck ich nochmal nach, wenn ich zu Hause bin.
    Edit: Am Namespace liegt's da aber nicht. Und die Darstellung ist es auch nicht, sonst würde es ja wenigstens kompilieren.



  • Wie gesagt, zitier den Compiler Fehler und denn Code den du zu kompilieren versuchst.



  • Der Compilerfehler zeigt wirklich genau das an, was ich oben geschrieben habe: Kann nicht von einem wide char Array zu einem wide string umwandeln.



  • Zeig Originalcode!

    Wenn ich Deinen Codezeilen aus dem Eingangsposting

    #include <string>
    #include <iostream>
    
    using namespace std;
    

    voranstelle, kompiliert es mit VS2015 einwandfrei.



  • Bin jetzt zu Hause und mit allen Schulaufgaben fertig und habe es auch mal probiert: An der write-Funktion an sich liegt's echt nicht, auch nicht am Aufrufen. Hab jetzt dieses Testprojekt, und es kompiliert:

    stdafx.h:

    #pragma once
    
    #include "targetver.h"
    
    #include <stdio.h>
    #include <tchar.h>
    
    // TODO: reference additional headers your program requires here
    #include <iostream>
    #include <string>
    
    using namespace std;
    

    write.h:

    #pragma once
    #include "stdafx.h"
    
    void write(wstring text);
    

    write.cpp:

    #include "stdafx.h"
    #include "write.h"
    
    void write(wstring text)
    {
    	wcout << text;
    }
    

    Wchar write test.cpp:

    #include "stdafx.h"
    #include "write.h"
    
    int main()
    {
    	system("chcp 65001");
    	write(L"ü");
    	string x;
    	cin >> x;
    }
    

    Also verstehe ich echt nicht, warum der Fehler aus dem Bild hier auftaucht:
    https://ibb.co/bHz8VF

    Edit: nochmal kompiliert und jetzt werden nur noch die unteren 4 Errors angezeigt.



  • Na offensichtlicherweise nimmt die 'write'-Funktion ein std::string. Steht in der Fehlermeldung auch so da.



  • Guck dir die write Funktion aus deinem Projekt nochmal ganz genau an, es wird da einen kleinen Unterschied geben zu der write Funktion die du hier gepostest hast und zwar schon in der Signatur.



  • Die Funktion aus dem Hauptprogramm direkt rüberkopiert:

    void write(wstring text)
    {
    	wcout << text << endl;
    }
    

    Der Parameter ist doch ein wstring, kein string. Also nimmt die Funktion doch keinen string.



  • Och man, im Header ist es falsch. Ich bin so unfähig. Ich hab jetzt 2 Tage diesen Fehler gesucht und es liegt einfach am Header.



  • Den Rest schaffe ich alleine, danke. Den Anfang hätte ich ja auch schon alleine schaffen sollen.



  • Hier noch als Dankeschön für die Hilfe gezeigt, wie man den Text richtig darstellt:

    stdafx.h:

    #include <iostream>
    #include <string>
    
    //für _setmode
    #include <io.h>
    #include <fcntl.h>
    
    using namespace std;
    

    write.h:

    #pragma once
    #include "stdafx.h"
    
    void write(wchar_t* text);
    

    write.cpp:

    #include "stdafx.h"
    #include "write.h"
    
    void write(wchar_t* text)
    {
    	wprintf(L"%s", text);
    }
    

    main.cpp:

    #include "sdtafx.h"
    #include "write.h"
    int main()
    {
    	//Die Konsole auf Unicode umstellen
    	_setmode(_fileno(stdout), _O_U16TEXT);
    
    	//Restlicher Code
    }
    

Anmelden zum Antworten