问题 尝试使用std :: wcout


尝试在vc ++ 2008 express中wcout wstring时,我收到一条相当奇怪的错误消息:

错误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!
}

我正在使用vc ++ 2008 express sp1,所有更新都达到KB948127。我知道控制台需要更改代码页,但这甚至都没有编译。谢谢。


941
2017-09-17 13:51


起源



答案:


你需要 #include <string>。我不确定标准是什么,但我很确定 <iostream> 不需要导出全部 <string>,如果有的话。

[编辑]至少 cplusplus.com 甚至没有列出 string 作为声明的类型 <iostream>。不,这不是标准,我知道... [/ edit]


14
2017-09-17 13:59



愚弄你的是宣布一条线的愚蠢行为 wstring 作品。包括<iostream>可以让你足够<string>来声明一个,但不能 operator<<  - 我猜想,只是有助于伤害。 - Kate Gregory


答案:


你需要 #include <string>。我不确定标准是什么,但我很确定 <iostream> 不需要导出全部 <string>,如果有的话。

[编辑]至少 cplusplus.com 甚至没有列出 string 作为声明的类型 <iostream>。不,这不是标准,我知道... [/ edit]


14
2017-09-17 13:59



愚弄你的是宣布一条线的愚蠢行为 wstring 作品。包括<iostream>可以让你足够<string>来声明一个,但不能 operator<<  - 我猜想,只是有助于伤害。 - Kate Gregory


对于有此问题的用户,您可能需要在控制台中启用多字节打印。看到答案: https://stackoverflow.com/a/41584090/1599699

我的评论:

由于sizeof(wchar_t)== sizeof(char)* 2,我在打印一个我实例化的长度超过我提供的数据的wstring时遇到问题,然后打印出任何不成功的东西。


0
2018-04-14 22:29