![](/img/trans.png)
[英]error C2664: 'strcmp' : cannot convert parameter 2 from 'char' to 'const char *'
[英]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通过使用模糊的#define
和typedef
链来隐藏它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.