C++ 无法从枚举转换为 LPCTSTR [关闭]
Posted
技术标签:
【中文标题】C++ 无法从枚举转换为 LPCTSTR [关闭]【英文标题】:C++ cannot convert from enum to LPCTSTR [closed] 【发布时间】:2014-06-05 11:17:14 【问题描述】:我在 Visual Studio 中编译游戏源代码,编译时发现一些错误。
错误 C2440:“正在初始化”:无法从 'eKind' 到 'LPCTSTR' 从整数类型转换为指针类型需要 reinterpret_cast、C-style cast 或 function-style cast
enum eKind
NONE,
CONSO, //consonant
V_UP, //vowel in upper
SV_UP, //special vowel in upper
V_SIDE, //vowel in side
V_UN, //vowel in under
V_UPSI, //vowel in upper and side
SOU, //special in upper
ENG, //english and number
LastKind = NONE;
LPCTSTR thai[255] =
NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, NONE, NONE, NONE, NONE, NONE, NONE,
NONE, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG,
ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, NONE, NONE, NONE, NONE, NONE,
NONE, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG,
ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, ENG, NONE, NONE, NONE, NONE, NONE,
NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE,
NONE, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO,
CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO,
CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO, CONSO,
V_SIDE, V_UP, V_SIDE, V_UPSI, V_UP, V_UP, V_UP, V_UP, V_UN, V_UN, NONE, NONE, NONE, NONE, NONE, NONE,
V_SIDE, V_SIDE, V_SIDE, V_SIDE, V_SIDE, V_SIDE, V_SIDE, SV_UP, SOU, SOU, SOU, SOU, SOU, NONE, NONE, NONE,
NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE
;
有什么问题?如何解决?
【问题讨论】:
错误信息的哪一部分不清楚?它们是不同的数据类型。一个是整数,一个是 C 风格的字符串。你明白为什么int x = "omg";
是一个错误吗?
枚举是内部整数。所以你不能将它们转换为字符串指针(LPCTSTR)
-1 问题中没有示例代码
您可以在 pastebin 链接中看到代码。我不能在这个线程中发帖,因为代码格式会丢失。
@tenfour 谢谢,我明白了。 :)
【参考方案1】:
enum
是一种标量数据类型。 LPCTSTR
是指向 char
或 wchar_t
的指针的 typedef(取决于 Unicode 设置)。
C++ 不允许从标量到指针的隐式转换。使用适当的源数据类型将其分配给LPCTSTR
。
在您的示例中,您想要定义一个 TCHAR
数组,而不是指向它的指针。
TCHAR thai[255] =
NONE, NONE,
// ...
;
【讨论】:
感谢您的帮助。我将更改数据类型。 :)【参考方案2】:例如,与 C# 不同,您可以在 C/C++ 中获取枚举的字符串表示形式。如果你想要这样的事情,你需要自己写一些。例如:
std::string eKindToString(eKind value)
switch(value)
case foo: return "foo";
case bar: return "bar";
// etc
return "unknown";
【讨论】:
看不到需要进行枚举->字符串转换。我错过了什么吗? 我觉得是因为以后可以使用std::string::c_str()
或者std::wstring::c_str()
是的,您的代码展示了如何规避 C++ 缺少的反射功能。但我没有在问题中找到这个。以上是关于C++ 无法从枚举转换为 LPCTSTR [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C++ 编译时提示:不能将参数 1 从“char [6]”转换为“LPCTSTR”
如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [9]”转换为“LPCTSTR”