C++ 向变量声明枚举时出错
我有以下语法:C++ 向变量声明枚举时出错,c++,enums,C++,Enums,我有以下语法: enum home { no, yes, }homew; home homes; std::string s; s="no"; homes=s; //is not working. Why? 我错了吗?您将字符串与枚举值混淆了 enum变量只是一个整数,您可以在编译时对其使用文本,仅此而已 < >它使代码更易于理解和自文档化,而不是仅仅使用数字文字。C++中的< P>枚举隐含地是 int 数据类型。不能将字符串值赋给枚举。< /p> < p>它不编译,因为C++没有提供从
enum home
{
no,
yes,
}homew;
home homes;
std::string s;
s="no";
homes=s; //is not working. Why?
我错了吗?您将字符串与枚举值混淆了
enum
变量只是一个整数,您可以在编译时对其使用文本,仅此而已
< >它使代码更易于理解和自文档化,而不是仅仅使用数字文字。C++中的< P>枚举隐含地是<代码> int <代码>数据类型。不能将字符串值赋给枚举。< /p> < p>它不编译,因为C++没有提供从<代码> STD::String 到<代码> EnUM < /C> >的内置机制。< /P>
typeof(home) != typeof(std::string) // types are not equal
因此,不能将enum
分配给std::string
或其他。但是,enum
和整数类型(如bool
、int
等)之间的隐式转换是可能的
有什么办法可以解决我的问题吗
如果可能,请使用
enum home { no, yes, } homew;
定义类型home
加上该类型的变量homew
。你是故意的吗?为什么?
enum
类型定义的值是文本,可以这样使用:
home homes = no;
正如其他人指出的,枚举值是
int
类型。您可以编写一个小函数,将枚举转换为字符串,如下所示:
std::string GetStringFromEnum(home iHome)
{
switch (home)
{
case yes: return "yes";
case no: return "no"; break;
default: return "here be dragons";
}
}
反之亦然:
home GetEnumFromString(std::string iImput)
{
if (iImput == "yes") return yes;
return no; //if you extend the enum beyond 2 values, this function will get more complicated
}
您可以这样修改代码:
homes = GetStringFromEnum(no)
这种方法的缺点是,如果修改枚举,还必须修改convert函数
嗯,
JP请不要对我们大喊大叫(:我应该说homes=0吗?@sunset:你可以简单地说
homes=yes
或homes=no
。在我的情况下,我应该写homes-=0吗?THX@sunset,只需单击std::map
;它本身就是一个容器类,类似于std::string
。您可以使用此容器关联您的字符串
(键)和enum
(value)。你需要#包括;只需参考我发布的链接中的示例。我确实在enum home的末尾添加了homew,因为否则我会出错。我不能说enum home{..};home homes;。
home GetEnumFromString(std::string iImput)
{
if (iImput == "yes") return yes;
return no; //if you extend the enum beyond 2 values, this function will get more complicated
}
homes = GetStringFromEnum(no)