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