0

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

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

我在不同的类中定义了 METHOD_ONE

#define METHOD_ONE "OFF"

我得到了上述错误。

有人能帮帮我吗?

干杯,

钦坦

4

1 回答 1

3

最重要的部分是理解错误;知道什么是 a const char [4],是容易的部分,但是,LPCTSTR呢?

根据微软文档

如果LPCWSTR定义了 UNICODE,则为 else LPCSTR。有关详细信息,请参阅字符串的 Windows 数据类型。

而且LPCWSTR是:

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

首先,您必须检查使用您的程序的编码类型;看来您正在使用UNICODE,所以最后您尝试将指向chars 的 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

或者使用_TRoman R 建议的宏。这个宏的唯一作用是L在文本后面附加前缀:

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

最后,您必须知道使用的是哪种字符串;但微软通过使用一个不起眼的#defines 和typedefs 链来隐藏它。

于 2012-09-12T08:36:07.007 回答