2011-03-02 70 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 
} 
相關問題