错误C2664:'CComboBox :: InsertString':无法将参数2从'const char [4]'转换为'LPCTSTR'

时间:2012-09-12 08:23:30

标签: c++ visual-c++ user-interface

我正在尝试执行以下操作:

class sig
{
    CComboBox objList;
    void SetDefault();
}
void sig :: SetDefault()
{
    objList.InsertString(0, METHOD_ONE);
}

我已将METHOD_ONE定义为另一个类

#define METHOD_ONE "OFF"

我得到了上述错误。

有人可以帮帮我吗?

干杯,

Chintan

1 个答案:

答案 0 :(得分:3)

最重要的部分是了解错误;知道什么是const char [4],这是一个简单的部分,但是LPCTSTR

呢?

根据Microsoft documentation

  

如果定义了UNICODE,则LPCWSTR,否则为LPCSTR。更多   信息,请参阅字符串的Windows数据类型。

LPCWSTR是:

  

指向以空字符结尾的16位Unicode字符的常量字符串的指针。有关更多信息,请参阅字体使用的字符集。

首先,您必须检查使用您的程序的编码类型;看来你正在使用UNICODE,所以最后你试图将一个const指针转换为char s(“OFF”常量)到一个指向wchar_t的const指针,(逻辑上)不允许转换。

然后,您可以选择正确的字符串类型;如果定义了UNICODE,则#define必须是宽字符串:

// Note the L
#define METHOD_ONE L"OFF"

您也可以这样定义:

#ifdef UNICODE
#define METHOD_ONE L"OFF"
#else
#define METHOD_ONE "OFF"
#endif

或使用Roman R建议的_T宏。此宏唯一的做法是在文本中附加L前缀:

#ifdef UNICODE
#define _T(x) L ##x
#else
#define _T(x) x
#endif

最后,你必须知道正在使用什么类型的字符串;但微软通过使用#definetypedef s的模糊链来隐藏它。