web-dev-qa-db-ja.com

std :: wstringを初期化して印刷する方法は?

私はコードを持っていました:

std::string st = "SomeText";
...
std::cout << st;

そしてそれはうまくいきました。しかし今、私のチームはwstringに移行したいと考えています。だから私は試しました:

std::wstring st = "SomeText";
...
std::cout << st;

しかし、これは私にコンパイルエラーを与えました:

エラー1エラーC2664: 'std :: basic_string <_Elem、_Traits、_Ax> :: basic_string(const std :: basic_string <_Elem、_Traits、_Ax>&)':パラメーター1を 'const char [8]'から'const std :: basic_string <_Elem、_Traits、_Ax>&' D:...\TestModule1.cpp 28 1 TestModule1

Webを検索した後、次のように定義する必要があることを読みました。

std::wstring st = L"SomeText"; // Notice the "L"
...
std::cout << st;

これはコンパイルされたが"0000000000012342" の代わりに "SomeText"

私は何を間違えていますか?

51
Roee Gavirel

Wstringを表示するには、ワイドバージョンのcout-wcoutも必要です。

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

つかいます std::wcout の代わりに std::cout

12
hmjd

この回答は、「C++/CLI」タグ、および関連するWindows C++コンソールに適用されます。

Std :: wstringにマルチバイト文字が含まれている場合、それを機能させるにはさらに2つのことを行う必要があります。

  1. ヘッダーを含める
    _#include <io.h>_
    _#include <fcntl.h>_
  2. 標準出力モードを設定する
    _setmode(_fileno(stdout), _O_U16TEXT)

結果: Multi-bytes console

8
Val

use std::wcout<<stを使用してみてください。問題が解決します。

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