c++不能从enum转换为LPCTSTR

C++ cannot convert from enum to LPCTSTR

本文关键字:LPCTSTR 转换 enum 不能 c++      更新时间:2023-10-16

我在Visual Studio中编译游戏源代码,在编译时发现一些错误。

错误C2440:"初始化":无法从"eKind"转"LPCTSTR"从整型到指针型的转换需要reinterpret_cast、c风格强制转换或函数风格强制转换

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
};

有什么问题吗?如何解决这个问题?

enum是标量数据类型。LPCTSTR是指向charwchar_t的指针的类型定义(取决于Unicode设置)。

c++不允许从标量到指针的隐式转换。使用适当的源数据类型将其分配给LPCTSTR

在你的例子中,你想定义一个TCHAR的数组,而不是指向它的指针。

TCHAR thai[255] = {
    NONE,   NONE,  
    // ...
};

例如,与c#不同,您可以在C/c++中获得枚举的字符串表示形式。如果你想这样做,你需要自己写一些。例如:

std::string eKindToString(eKind value)
{
  switch(value)
  {
    case foo: return "foo";
    case bar: return "bar";
    // etc
  }
  return "unknown";
}