我想回答一个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