12

尝试在 vc++ 2008 express 中输出 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。我知道控制台需要更改代码页,但这甚至没有编译。谢谢。

4

2 回答 2

16

你需要#include <string>。我不确定标准是怎么说的,但我很确定<iostream>不需要导出所有的<string>.

[编辑] 至少cplusplus.com甚至没有列出string<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 回答