c++ - 枚举不返回值

标签 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(取决于参数)。它仍然没有返回正确的值。我做错了什么?

最佳答案

尝试更改 AGK_Delete::TypeConversion 以采用 std::string 而不是 const char *

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

类类型可以重写方法以允许 == 做你想做的事,所以 std::stringoperator== 将比较值。

本地指针将 == 解释为同一个地方的意思。如果您想比较您正在使用的旧 C 风格的值,请查看 strcmp。为了安全起见,您实际上应该使用 std::strncmp,并将长度传递为比可接受值的最大长度多 1。

text ---> 0x1234 [ABC]
"ABC" --> 0x2345 [ABC]

0x1234 != 0x2345 但是 strcmp(text, "ABC") 比较值

使用 std::string 将执行与 strcmp 等效的操作,而不是指针相等

关于c++ - 枚举不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30671214/

相关文章:

c++ - 在具有大型代码库的 Eclipse IDE 中搜索函数或文本

c++ - 在 C++11 中迭代容器的推荐方法是什么?

Swift - 具有可交换性的模式匹配

c++ - 从整数转换为枚举值时如何以及在何处检查错误?

c++ - '字节' : ambiguous symbol error when using of Crypto++ and Windows SDK

javascript - 如何通过 C++/Javascript 项目跟踪函数和变量的使用

java - 创建抽象枚举的方法

java - 在fasterxml中,反序列化json后,如果enum是类中的第一个属性,其他字段为null

java - 在 Java 中,如何在枚举本身中获取枚举的值?

c++ - std::tr1::函数赋值和绑定(bind)