我正在尝试执行以下操作:
class sig
{
CComboBox objList;
void SetDefault();
}
void sig :: SetDefault()
{
objList.InsertString(0, METHOD_ONE);
}
我在不同的类中将 METHOD_ONE 定义为
#define METHOD_ONE "OFF"
我得到了上面的错误。
有人可以帮帮我吗?
干杯,
金丹
最佳答案
最重要的部分是理解错误;知道什么是 const char [4]
是比较简单的部分,但是 LPCTSTR
呢?
An
LPCWSTR
if UNICODE is defined, anLPCSTR
otherwise. For more information, see Windows Data Types for Strings.
LPCWSTR
是:
A pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see Character Sets Used By Fonts.
首先,您必须检查您的程序使用的编码类型;看起来你正在使用 UNICODE
,所以最后你试图将一个 const 指针转换为 char
s(“OFF”常量)到一个 const 指针到 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
或者使用 Roman R 建议的 _T
宏。这个宏唯一做的就是将 L
前缀附加到文本:
#ifdef UNICODE
#define _T(x) L ##x
#else
#define _T(x) x
#endif
最后,您必须知道使用的是哪种字符串;但微软通过使用一个模糊的 #define
和 typedef
链来隐藏它。
关于c++ - 错误 C2664 : 'CComboBox::InsertString' : cannot convert parameter 2 from 'const char [4]' to 'LPCTSTR' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12383963/