12

vc ++ 2008expressでwstringをwcoutしようとすると、かなり奇妙なエラーメッセージが表示されます。

エラーC2679:バイナリ'<<':タイプ'std :: wstring'の右側のオペランドをとる演算子が見つかりません(または受け入れ可能な変換がありません)

私がこれを正しく理解している場合、wcoutがwstringを受け入れないことを報告していますか?私は誰かにLinuxでこのコードをコンパイルするように頼みます、そしてそれはうまく動きます。また、vc ++ 2008 Expressを使用して別のコンピューターで同じコードを試しましたが、それでも失敗します。vc ++ 2008のstdに関する既知の問題?

#include <iostream>

int main()
{
 std::wstring unicode_test = L"Unicode var";
 std::wcout << L"Unicode non-var" << std::endl;
 std::wcout << unicode_test << std::endl;    //<-- This line fails!
}

KB948127までのすべてのアップデートでvc++2008expresssp1を使用しています。コンソールでコードページを変更する必要があることは承知していますが、これはコンパイルすらしていません。ありがとう。

4

2 に答える 2

16

あなたがする必要があり#include <string>ます。規格が何を言っているのかはわかりませんが、もしあれば、<iostream>すべてをエクスポートする必要はないと確信してい<string>ます。

[編集]少なくともcplusplus.comstringは、で宣言されたタイプとしてリストされていません<iostream>。いいえ、それは標準ではありません、私は知っています... [/ edit]

于 2009-09-17T13:59:04.080 に答える
0

この問題を抱えている人は、コンソールでマルチバイト印刷を有効にする必要があるかもしれません。ここで答えを参照してください:https ://stackoverflow.com/a/41584090/1599699

そして私のコメント:

sizeof(wchar_t)== sizeof(char)* 2が原因で、提供したデータよりも長い長さでインスタンス化したwstringの印刷に問題があり、その後の印刷は成功しませんでした。

于 2018-04-14T22:29:16.607 に答える