Ошибка C2664: "CComboBox::InsertString": невозможно преобразовать параметр 2 из "const char [4]" в "LPCTSTR"
Я пытаюсь сделать следующее:
class sig
{
CComboBox objList;
void SetDefault();
}
void sig :: SetDefault()
{
objList.InsertString(0, METHOD_ONE);
}
Я определил METHOD_ONE в другом классе как
#define METHOD_ONE "OFF"
И я получаю вышеуказанную ошибку.
Может кто-нибудь, пожалуйста, помогите мне?
Ура,
Chintan
1 ответ
Наиболее важной частью является понимание ошибки; знать, что такое const char [4]
, это легкая часть, но, как насчет LPCTSTR
?
Согласно документации Microsoft:
LPCWSTR
если UNICODE определен,LPCSTR
иначе. Для получения дополнительной информации см. Типы данных Windows для строк.
И LPCWSTR
является:
Указатель на постоянную строку с нулевым символом в конце, состоящую из 16-битных символов Юникода. Для получения дополнительной информации см. Наборы символов, используемые шрифтами.
Во-первых, вы должны проверить, какой тип кодировки использует ваша программа; кажется, что вы используете UNICODE
в итоге вы пытаетесь преобразовать константный указатель в char
s (константа "OFF") для константного указателя на wchar_t
и (по логике) преобразование не допускается.
Затем вы можете выбрать правильный тип строки; если UNICODE определен, ваш #define
должна быть широкая строка:
// Note the L
#define METHOD_ONE L"OFF"
Вы также можете определить это так:
#ifdef UNICODE
#define METHOD_ONE L"OFF"
#else
#define METHOD_ONE "OFF"
#endif
Или используйте _T
макрос, предложенный Романом Р. Единственное, что делает этот макрос, это добавить L
префикс к тексту:
#ifdef UNICODE
#define _T(x) L ##x
#else
#define _T(x) x
#endif
В конце вы должны знать, какую строку используете; но Microsoft скрывает это, используя неясную цепочку #define
с и typedef
s.