我想回答一個basic_string<TCHAR>
。但cout拋出錯誤。我可以知道該怎麼做如何關閉std :: basic_string <TCHAR>
回答
TCHAR
是您的應用程序使用的字符類型的winapi定義。如果您將字符集設置爲多字節字符,則它將是char
。如果您將它設置爲Unicode,則它將爲wchar_t
。
如果是wchar_t
,則需要使用std::wcout
。否則,只是簡單的std::cout
應該沒問題。
一般來說,它也有助於解釋你所得到的錯誤,但很可能你試圖在std::cout
中插入std::basic_string<wchar_t>
,並且可能沒有operator<<
過載。
正如dauphic所說,std::wcout
適用於寬字符串,std::cout
適用於窄字符串。如果你想能夠編譯任一類型的字符串(TCHAR
是爲了讓這樣的事情更容易)這樣的事情,有時讓生活更輕鬆:
#if defined(UNICODE) || defined(_UNICODE)
#define tcout std::wcout
#else
#define tcout std::cout
#endif
有了這個地方使用TCOUT代替。
您也可以將tcout聲明爲對正確流的引用,而不是使用討厭的#defines。 :-) – 2011-03-02 17:04:10
@波佩爾森:啊,一個清教徒。 :-) – Steve 2011-03-03 04:07:25
如@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
}
- 1. boost :: filesystem :: path :: native()返回std :: basic_string <wchar_t>而不是std :: basic_string <char>
- 2. 「str2Int(std :: basic_string <char,std :: char_traits <char>,std :: allocator <char>> const&)」,引用自:
- 3. 沒有匹配函數調用'std :: basic_string <char> :: basic_string C++
- 4. C++ - 轉換std :: basic_string <char>
- 5. std :: basic_string專業
- 6. 轉換::對<性病:: basic_string的<炭的std :: char_traits <char>
- 7. std :: basic_string的使用
- 8. std :: string {aka std :: basic_string <char>}'to'char *'in assignment |
- 9. 轉換 '的std :: __ cxx11 :: basic_string的<char>' 到 '的std :: ostream_iterator <char>'
- 10. basic_string <CharT>與CharT *
- 11. 未定義模板的隱式實例化std :: basic_string <char,std :: char_traits <char>,std :: allocator <char>>'
- 12. 未定義的引用`librarymanager :: getBook(std :: basic_string <char,std :: char_traits <char>,std :: allocator <char>>)
- 13. 的std :: basic_string的類型
- 14. C++循環std :: vector <std :: map <std :: string,std :: string>>
- 15. 錯誤:'操作符*'不匹配(操作數類型是'std :: string {aka std basic_string <char>}'和{aka std basic_string <char>}')
- 16. 如何關閉來自java.lang.Process的std-streams?
- 17. 編譯錯誤,說'std :: basic_string <charT,_Traits,_Alloc>
- 18. 錯誤:無法將'std :: basic_string <char>'轉換爲int中的
- 19. 爲什麼預解壓std :: basic_string <T> break boost :: regex?
- 20. 字符串文字basic_string <unsigned char>
- 21. 是否可以模板basic_string <> :: iterator?
- 22. 有關的std :: basic_string的在Solaris(x86)的一些困惑
- 23. 錯誤C2039 - 不是std :: basic_string的成員
- 24. C++的std :: basic_string的/ char_traits專業化
- 25. 的std :: out_of_range什麼():basic_string的:: SUBSTR
- 26. C++中的std :: basic_string :: npos聲明11
- 27. 調用的std ::〜在gdb的basic_string()
- 28. 來自std :: basic_string的私有繼承
- 29. 如何解決:「錯誤C2039:'cstr':不是'std :: basic_string」的成員?
- 30. 如何將std :: basic_string類型轉換爲char類型的數組?
你能給一些示例代碼,也是你得到確切的錯誤? – 2011-03-02 08:43:07
在處理錯誤時,請說明您想要實現的內容,錯誤報告的確切代碼以及編譯器/鏈接器錯誤。這些信息將幫助他人幫助你。 – 2011-03-02 08:43:52