Enum没有回报价值

时间:2015-06-05 16:16:36

标签: c++ enums

AGK_Delete.h

class AGK_Delete
{
private:
    enum OBJTYPE { text, button };
    OBJTYPE TypeConversion(const char * type);
};

AGK_Delete.cpp

AGK_Delete::OBJTYPE AGK_Delete::TypeConversion(const char * type) 
{
    std::cout << type; // it gives the correct type
    if (type == "TEXT") return text;
    if (type == "BUTTON") return button;
}

我不明白为什么即使我传递了正确的参数,我也没有得到所需的返回值。正如你在第二段代码中看到的那样,我还有一个cout命令,它给出了输出:TEXT或BUTTON(取决于param)。它仍然没有返回正确的值。我做错了什么?

2 个答案:

答案 0 :(得分:2)

尝试更改AGK_Delete::TypeConversion以取std::string代替const char *

const char *传递给std::string参数将使用传递的参数值创建一个std :: string。

类类型可以覆盖允许==执行您认为自己正在执行的操作的方法,因此std::string的{​​{1}}将比较值。

原生指针将operator==解释为在同一个地方。如果要比较您正在使用的旧C样式中的值,请查看==。为了安全起见,您应该使用strcmp,并将长度传递给可接受值的最大长度1以上。

std::strncmp

text ---> 0x1234 [ABC] "ABC" --> 0x2345 [ABC] 0x1234 != 0x2345比较值

使用strcmp(text, "ABC")将相当于std::string而不是指针相等

答案 1 :(得分:1)

  

我做错了什么?

您正在比较两个字符串的地址,而不是比较它们的内容。

使用strcmp(a,b)