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;
    
  • 在C++中,没有内置的方法来转换枚举值文字和它们的字符串表示形式。如果你需要这个,你必须


    正如其他人指出的,枚举值是
    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)