我想回答一個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. 從'const std :: __ 1 :: basic_string <char>到'std :: __ 1 :: basic_string <char> *'
- 2. 轉換::對<性病:: basic_string的<炭的std :: char_traits <char>
- 3. std :: basic_string的使用
- 4. basic_string <CharT>與CharT *
- 5. C++循環std :: vector <std :: map <std :: string,std :: string>>
- 6. 錯誤:'操作符*'不匹配(操作數類型是'std :: string {aka std basic_string <char>}'和{aka std basic_string <char>}')
- 7. 字符串文字basic_string <unsigned char>
- 8. 是否可以模板basic_string <> :: iterator?
- 9. 調用的std ::〜在gdb的basic_string()
- 10. 來自std :: basic_string的私有繼承
- 11. 錯誤C2039 - 不是std :: basic_string的成員
- 12. 如何解決:「錯誤C2039:'cstr':不是'std :: basic_string」的成員?
- 13. std :: vector <std :: pair <int,std :: pair <bone,std :: string> >>不按int整理?
- 14. std ::向量<std::string>崩潰
- 15. C++錯誤:無法將const std :: basic_string <char>'轉換爲int中的int
- 16. 無法將參數1從'char'轉換爲'const std :: basic_string <_Elem,_Traits,_Ax>&'
- 17. 到常量爲wchar_t *轉換爲常量的std :: basic_string的<char_t>
- 18. 不能將'std :: string {aka std :: basic_string <char>}'轉換爲'char *'將參數'2'轉換爲'int Save(int,char *)'
- 19. 錯誤:'operator =='不匹配(操作數類型是'Seat'和'std :: string {aka std :: basic_string <char>}')
- 20. 爲什麼我會收到錯誤:無法將'std :: string {aka std :: basic_string <char>}'轉換爲'char *'賦值?
- 21. wxWidgets - 錯誤:從'wxCStrData'轉換爲非標量類型'std :: string {aka std :: basic_string <char>}'要求
- 22. basic_string <wchar_t> UTF16編碼爲NSString
- 23. 如何將wchar_t []轉換爲basic_string <_Elem>?
- 24. 如何關閉<a>標記<img>?
- 25. 複製一個basic_string <char16_t>到矢量<uint8_t>
- 26. 我需要關閉一個std :: fstream嗎?
- 27. C++ std :: ofstream flush()但不關閉()
- 28. 如何迭代boost :: variant <std :: vector <int>,std :: vector <String>>?
- 29. 錯誤:初始化參數1'SetIterator <T> :: SetIterator(T *)[with T = std :: basic_string <char>]'
- 30. 如何關閉
你能給一些示例代碼,也是你得到確切的錯誤? – 2011-03-02 08:43:07
在處理錯誤時,請說明您想要實現的內容,錯誤報告的確切代碼以及編譯器/鏈接器錯誤。這些信息將幫助他人幫助你。 – 2011-03-02 08:43:52