簡體   English   中英

如何cout std :: basic_string <TCHAR>

[英]How to cout the std::basic_string<TCHAR>

我想嘗試一個basic_string<TCHAR> 但是cout正在拋出錯誤。 我可以知道該怎么做

正如dauphic所說, std::wcout用於寬字符串, std::cout用於窄字符串。 如果你想能夠為任何一種類型的字符串進行編譯( TCHAR意味着使這類事情變得更容易),這樣的事情有時會讓生活更輕松:

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

有了這個使用tcout而不是。

TCHAR是應用程序使用的字符類型的winapi定義。 如果將字符集設置為多字節字符,則它將為char 如果將它設置為Unicode, wchar_t

如果是wchar_t ,則需要使用std::wcout 否則,只是普通的std::cout應該沒問題。

通常,它也有助於解釋你得到的錯誤,但很可能你試圖將std::basic_string<wchar_t>插入到std::cout ,並且可能沒有operator<< overload。

正如@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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM