枚举中的C ++名称显示为字符串

时间:2017-03-16 18:59:38

标签: c++ string enums

我正在为学校做一个小项目,并且必须创建一个包含怪物类型的枚举,然后创建一个带有值并将怪物类型显示为字符串的函数。这是我的代码:

enum MonsterType
{
    GHOST,
    DRAGON,
    GHOUL,
    SHRIEKER,
    GRIFFIN,
};

string getTypeName()
{
    int ID;
    cout << "Input Monster ID" << endl;
    cin >> ID;
    return MonsterType(ID);
}

我得到的错误如下:

no suitable constructor exists to convert from "MonsterType" to "std::basic_string<char, std::char_traits<char>, std::allocator<char>>"

'return': cannot convert from 'MonsterType' to 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>'

我确定有一件我想念的小事并且没有意识到,如果你能帮助我,我真的很感激。

谢谢

2 个答案:

答案 0 :(得分:0)

你能做的是

enum MonsterType
{
    GHOST,
    DRAGON,
    GHOUL,
    SHRIEKER,
    GRIFFIN,
};

string GetName(MonsterType monsterType){
  string monsterNames[] = {"Ghost", "Dragon", "Ghoul", "Shriker", "Griffin"};
  return monsterNames[monsterType];
}

答案 1 :(得分:0)

这两个错误都在说同样的事情。

您的return MonsterType(ID)正在获得新的MonsterType,并尝试将其返回。

该函数是原型string getTypeName()(如果您想说'无参数',则应该string getTypeName(void)),因此您尝试将新的MonsterType变量转换为{ {1}}。编译器抱怨说它不知道如何做到这一点。

解决此问题的最佳方法是为您定义的每个名单类型创建一个文本(string)表示列表,并在它们之间创建一个函数映射。

string

#include <iostream> #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[-1])) using namespace std; enum MonsterType { GHOST, DRAGON, GHOUL, SHRIEKER, GRIFFIN, }; string MonsterNames[] = { "Ghost", "Dragon", "Ghoul", "Shrieker", "Griffin", }; string getTypeName() { int ID; cout << "Input Monster ID" << endl; cin >> ID; if (ID < ARRAY_SIZE(MonsterNames)) { return MonsterNames[ID]; } return "unknown"; } int main(void) { cout << getTypeName() << endl; } 只是一个由数字标识的“事物”列表。您不能将该事物的名称作为字符串访问,而只能作为“关键字”。