web-dev-qa-db-fra.com

Comment initialiser et imprimer un std :: wstring?

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 ?

51
Roee Gavirel

Pour afficher un wstring, vous avez également besoin d'une version large de cout-wcout.

std::wstring st = L"SomeText";
...
std::wcout << st; 
86
Bo Persson

Utilisation std::wcout au lieu de std::cout.

12
hmjd

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:

  1. Inclure les en-têtes
    #include <io.h>
    #include <fcntl.h>
  2. Définir le mode standard
    _setmode(_fileno(stdout), _O_U16TEXT)

Résultat: Multi-bytes console

8
Val

essayez d'utiliser use std::wcout<<st cela résoudra votre problème.

std::wstring st = "SomeText";
...
std::wcout << st;
6
Hemant Metalia