How to cout the std::basic_string

前端 未结 3 1959
眼角桃花
眼角桃花 2020-12-16 14:41

I am trying to cout a basic_string. But cout is throwing error. Can I know how to do that

相关标签:
3条回答
  • 2020-12-16 14:43

    As dauphic said, std::wcout is for wide strings and std::cout for narrow ones. If you want to be able to compile for either type of string (TCHAR is meant to make this sort of thing easier) something like this sometimes makes life easier:

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

    With this in place use tcout instead.

    0 讨论(0)
  • 2020-12-16 14:51

    As @Bo Persson mentioned, another way of defining a tcout type would be using references with the correct stream types. Though there are a few more things to consider when doing that, as you'll easily end up with linker issues due to multiple or missing definitions.

    What works for me is declaring these types as external references in a header and defining them once in a source file. This also works in a precompiled header (stdafx).

    Header

    namespace std
    {
    #ifdef UNICODE
        extern wostream& tcout;
    #else
        extern ostream& tcout;
    #endif // UNICODE
    }
    

    Implementation

    namespace std
    {
    #ifdef UNICODE
        wostream& tcout = wcout;
    #else
        ostream& tcout = cout;
    #endif // UNICODE
    }
    
    0 讨论(0)
  • 2020-12-16 14:52

    TCHAR is a winapi define for the character type used by your application. If you have the character set as multi-byte characters, it will be char. If you have it set to Unicode, it will be wchar_t.

    If it's wchar_t, you need to use std::wcout. Otherwise, just plain std::cout should be fine.

    Generally it helps to also explain what errors you're getting, but most likely you're trying to insert an std::basic_string<wchar_t> into std::cout, and there probably isn't an operator<< overload for that.

    0 讨论(0)
提交回复
热议问题