Ошибка 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в итоге вы пытаетесь преобразовать константный указатель в chars (константа "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с и typedefs.

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