我正在为学校做一个小项目,并且必须创建一个包含怪物类型的枚举,然后创建一个带有值并将怪物类型显示为字符串的函数。这是我的代码:
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>>'
我确定有一件我想念的小事并且没有意识到,如果你能帮助我,我真的很感激。
谢谢
答案 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;
}
只是一个由数字标识的“事物”列表。您不能将该事物的名称作为字符串访问,而只能作为“关键字”。