我想尝试cazxswpoi。但是cout正在抛出错误。我可以知道该怎么做
正如dauphic所说,basic_string<TCHAR>
用于宽弦,std::wcout
用于窄弦。如果你想能够编译任何一种类型的字符串(std::cout
意味着使这种事情变得更容易),这样的事情有时会让生活更轻松:
TCHAR
有了这个使用tcout而不是。
#if defined(UNICODE) || defined(_UNICODE)
#define tcout std::wcout
#else
#define tcout std::cout
#endif
是您的应用程序使用的字符类型的winapi定义。如果您将字符集设置为多字节字符,则它将是TCHAR
。如果你将它设置为Unicode,它将是char
。
如果它是wchar_t
,你需要使用wchar_t
。否则,只是简单的std::wcout
应该没问题。
一般来说,它也有助于解释你得到的错误,但很可能你试图将std::cout
插入std::basic_string<wchar_t>
,并且可能没有std::cout
重载。
正如@Bo Persson所提到的,另一种定义operator<<
类型的方法是使用具有正确流类型的引用。虽然在执行此操作时还有一些事情需要考虑,因为由于多个或缺少定义,您很容易就会遇到链接器问题。
对我有用的是将这些类型声明为标题中的外部引用,并在源文件中定义它们一次。这也适用于预编译头(stdafx)。
头
tcout
履行
namespace std
{
#ifdef UNICODE
extern wostream& tcout;
#else
extern ostream& tcout;
#endif // UNICODE
}