2011-03-02 44 views
12

我想回答一个basic_string<TCHAR>。但cout抛出错误。我可以知道该怎么做如何关闭std :: basic_string <TCHAR>

+3

你能给一些示例代码,也是你得到确切的错误? – 2011-03-02 08:43:07

+0

在处理错误时,请说明您想要实现的内容,错误报告的确切代码以及编译器/链接器错误。这些信息将帮助他人帮助你。 – 2011-03-02 08:43:52

回答

6

TCHAR是您的应用程序使用的字符类型的winapi定义。如果您将字符集设置为多字节字符,则它将是char。如果您将它设置为Unicode,则它将为wchar_t

如果是wchar_t,则需要使用std::wcout。否则,只是简单的std::cout应该没问题。

一般来说,它也有助于解释你所得到的错误,但很可能你试图在std::cout中插入std::basic_string<wchar_t>,并且可能没有operator<<过载。

19

正如dauphic所说,std::wcout适用于宽字符串,std::cout适用于窄字符串。如果你想能够编译任一类型的字符串(TCHAR是为了让这样的事情更容易)这样的事情,有时让生活更轻松:

#if defined(UNICODE) || defined(_UNICODE) 
#define tcout std::wcout 
#else 
#define tcout std::cout 
#endif 

有了这个地方使用TCOUT代替。

+5

您也可以将tcout声明为对正确流的引用,而不是使用讨厌的#defines。 :-) – 2011-03-02 17:04:10

+1

@波佩尔森:啊,一个清教徒。 :-) – Steve 2011-03-03 04:07:25

0

如@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 
} 
相关问题