74

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

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

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

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

"0000000000012342"これはコンパイルされますが、代わりに印刷され"SomeText"ます。

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

4

4 に答える 4

132

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

std::wstring st = L"SomeText";
...
std::wcout << st; 
于 2012-01-09T12:00:15.833 に答える
20

std::wcoutの代わりに使用しstd::coutます。

于 2012-01-09T12:00:25.087 に答える
8

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

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

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

結果: マルチバイトコンソール

于 2017-01-11T06:27:43.913 に答える
6

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

std::wstring st = "SomeText";
...
std::wcout << st;
于 2012-01-09T12:03:38.653 に答える