c++ - 错误 C2664 : 'CComboBox::InsertString' : cannot convert parameter 2 from 'const char [4]' to 'LPCTSTR'

标签 c++ visual-c++ user-interface

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

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 documentation :

An LPCWSTR if UNICODE is defined, an LPCSTR 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 指针转换为 chars(“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

最后,您必须知道使用的是哪种字符串;但微软通过使用一个模糊的 #definetypedef 链来隐藏它。

关于c++ - 错误 C2664 : 'CComboBox::InsertString' : cannot convert parameter 2 from 'const char [4]' to 'LPCTSTR' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12383963/

相关文章:

c++ - 为什么 C++ 继承机制不透明?

c++ - 如何使用 QT 扩展资源管理器上下文菜单?

c++ - 如何将单链表变成双向链表

c++ - Qt C++ QString 到 QByteArray 的转换

user-interface - 如何通过脚本访问OnClick事件

perl - Perl命令行解释器在退出时崩溃

c++ - Visual C++ 预编译头错误

visual-c++ - 检查 DLL 是否使用 SSE 指令

gcc、clang 和 msvc 的 C++ 自动矢量化要求

user-interface - Qt:关于动态 UI 的建议