J'avais le code:
std::string st = "SomeText";
...
std::cout << st;
et cela a bien fonctionné. Mais maintenant, mon équipe veut passer à wstring
. J'ai donc essayé:
std::wstring st = "SomeText";
...
std::cout << st;
mais cela m'a donné une erreur de compilation:
Erreur 1 erreur C2664: 'std :: basic_string <_Elem, _Traits, _Ax> :: basic_string (const std :: basic_string <_Elem, _Traits, _Ax> &)': ne peut pas convertir le paramètre 1 de 'const char [8]' en 'const std :: basic_string <_Elem, _Traits, _Ax> &' D: ...\TestModule1.cpp 28 1 TestModule1
Après avoir cherché sur le Web, j'ai lu que je devais le définir comme:
std::wstring st = L"SomeText"; // Notice the "L"
...
std::cout << st;
ce compilé mais affiche "0000000000012342"
au lieu de "SomeText"
.
Qu'est-ce que je fais mal ?
Pour afficher un wstring, vous avez également besoin d'une version large de cout-wcout.
std::wstring st = L"SomeText";
...
std::wcout << st;
Utilisation std::wcout
au lieu de std::cout
.
Cette réponse s'applique à la balise "C++/CLI" et à la console Windows C++ associée.
Si vous avez des caractères multi-octets dans std :: wstring, deux autres choses doivent être faites pour que cela fonctionne:
#include <io.h>
#include <fcntl.h>
_setmode(_fileno(stdout), _O_U16TEXT)
essayez d'utiliser use std::wcout<<st
cela résoudra votre problème.
std::wstring st = "SomeText";
...
std::wcout << st;