繁体   English   中英

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

[英]error C2664: 'CComboBox::InsertString' : cannot convert parameter 2 from 'const char [4]' to 'LPCTSTR'

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

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

我在另一个类中定义了METHOD_ONE

#define METHOD_ONE "OFF"

我得到了上面的错误。

有人能帮帮我吗?

干杯,

金坛

最重要的是了解错误 ; 知道什么是const char [4] ,这很容易,但是LPCTSTR呢?

根据Microsoft文档

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

LPCWSTR是:

指向以16位Unicode字符为常数的,以空字符终止的常量的指针。 有关更多信息,请参见字体使用的字符集。

首先,您必须检查程序正在使用哪种编码类型; 似乎您正在使用UNICODE ,因此最后您尝试将指向char的const指针(“ 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宏。此宏唯一_T就是在文本后附加L前缀:

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

最后,您必须知道正在使用哪种字符串。 但是Microsoft通过使用模糊的#definetypedef链来隐藏它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM