Как настроить std :: basic_string <TCHAR> - PullRequest
14 голосов
/ 02 марта 2011

Я пытаюсь поймать basic_string<TCHAR>.Но Кут бросает ошибку.Могу ли я знать, как это сделать

Ответы [ 3 ]

21 голосов
/ 02 марта 2011

Как сказал дофизик, std::wcout для широких струн и std::cout для узких. Если вы хотите иметь возможность компилировать для любого типа строки (TCHAR предназначена для облегчения такого рода вещей), что-то подобное иногда облегчает жизнь:

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

С этим вместо этого используйте tcout.

6 голосов
/ 02 марта 2011

TCHAR - это определение winapi для типа символов, используемого вашим приложением.Если у вас есть набор символов в качестве многобайтовых символов, это будет char.Если вы установили Unicode, это будет wchar_t.

Если это wchar_t, вам нужно использовать std::wcout.Иначе, просто std::cout должно быть в порядке.

Как правило, это также помогает объяснить, какие ошибки вы получаете, но, скорее всего, вы пытаетесь вставить std::basic_string<wchar_t> в std::cout, и тамвероятно, это не перегрузка operator<<.

3 голосов
/ 13 февраля 2018

Как упоминал @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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...