我正在尝试执行以下操作:
class sig
{
CComboBox objList;
void SetDefault();
}
void sig :: SetDefault()
{
objList.InsertString(0, METHOD_ONE);
}
我在不同的类中定义了 METHOD_ONE
#define METHOD_ONE "OFF"
我得到了上述错误。
有人能帮帮我吗?
干杯,
钦坦
我正在尝试执行以下操作:
class sig
{
CComboBox objList;
void SetDefault();
}
void sig :: SetDefault()
{
objList.InsertString(0, METHOD_ONE);
}
我在不同的类中定义了 METHOD_ONE
#define METHOD_ONE "OFF"
我得到了上述错误。
有人能帮帮我吗?
干杯,
钦坦
最重要的部分是理解错误;知道什么是 a const char [4]
,是容易的部分,但是,LPCTSTR
呢?
根据微软文档:
如果
LPCWSTR
定义了 UNICODE,则为 elseLPCSTR
。有关详细信息,请参阅字符串的 Windows 数据类型。
而且LPCWSTR
是:
指向 16 位 Unicode 字符的以空字符结尾的常量字符串的指针。有关详细信息,请参阅字体使用的字符集。
首先,您必须检查使用您的程序的编码类型;看来您正在使用UNICODE
,所以最后您尝试将指向char
s 的 const 指针(“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
或者使用_T
Roman R 建议的宏。这个宏的唯一作用是L
在文本后面附加前缀:
#ifdef UNICODE
#define _T(x) L ##x
#else
#define _T(x) x
#endif
最后,您必须知道使用的是哪种字符串;但微软通过使用一个不起眼的#define
s 和typedef
s 链来隐藏它。