Невозможно преобразовать из "unsigned short [9]" в "char []"

Я работаю над очень старым проектом C++. При построении моего кода C++ в Visual Studio 6 я получаю сообщение об ошибке "не могу преобразовать из" unsigned short [9] "в" char [] "".

для кода ниже:

char    variable[] = _T("something");

Я погуглил и попытался понять проблему. Это может быть способ, которым я строю это.

Я уже попробовал шаг, написанный в https://mihai-nita.net/2006/07/23/visual-studio-unicode-projects/ (добавление UNICODE & _UNICODE в препроцессоре). Было бы очень полезно, если бы кто-то мог предложить решение, чтобы исправить эту ошибку.

1 ответ

_T макрос расширяется до узкого или широкого строкового литерала в зависимости от состояния UNICODE макро. Если UNICODE не определено _T будет расширяться до char строка, и если UNICODE определено _T расширится до широкой символьной строки.

Если вы используете _T, вы должны использовать тип TCHARкоторый будет также расширяться либо char или же wchar_t в зависимости от состояния UNICODE макросы:

TCHAR variable[] = _T("something");

Это расширится до

char variable[] = "something";

если UNICODE не определяется, и будет расширяться до чего-то вроде

wchar_t variable[] = L"something";

если UNICODE определено.

Стоит отметить, что wchar_t не был настоящим типом в ранних версиях Visual C++, а скорее просто typedef для (или расширение макроса в) unsigned shortВот почему сообщение об ошибке вы видите ссылки, которые вместо wchar_t,

Другие вопросы по тегам