如何cout std :: basic_string

问题描述 投票:14回答:3

我想尝试cazxswpoi。但是cout正在抛出错误。我可以知道该怎么做

c++ string visual-c++ stl
3个回答
21
投票

正如dauphic所说,basic_string<TCHAR>用于宽弦,std::wcout用于窄弦。如果你想能够编译任何一种类型的字符串(std::cout意味着使这种事情变得更容易),这样的事情有时会让生活更轻松:

TCHAR

有了这个使用tcout而不是。


6
投票

#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重载。


3
投票

正如@Bo Persson所提到的,另一种定义operator<<类型的方法是使用具有正确流类型的引用。虽然在执行此操作时还有一些事情需要考虑,因为由于多个或缺少定义,您很容易就会遇到链接器问题。

对我有用的是将这些类型声明为标题中的外部引用,并在源文件中定义它们一次。这也适用于预编译头(stdafx)。

tcout

履行

namespace std
{
#ifdef UNICODE
    extern wostream& tcout;
#else
    extern ostream& tcout;
#endif // UNICODE
}
© www.soinside.com 2019 - 2024. All rights reserved.