枚举不返回值[重复]

Posted

技术标签:

【中文标题】枚举不返回值[重复]【英文标题】:Enum not returning value [duplicate] 【发布时间】:2015-06-05 16:16:35 【问题描述】:

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

【问题讨论】:

改用 C++ 字符串,它们可以==比较。 @Biffen 非常糟糕的建议。为什么只需要为字符串比较分配内存? @c-smile 和 C 字符串不需要内存? C++ 字符串有很多的好处,在我看来 OP 可以使用它们。 @Biffen 问题一般与字符串无关。这是关于这个特殊签名的特殊功能。 @c-smile 如果遵循 你的 逻辑,那么最终的建议是:使用 C。好吧,不能站在这里与一个顽固的 人类作斗争 一整天;我有一个例外要赶上!永远再见(我希望)。 【参考方案1】:

尝试将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 != 0x2345strcmp(text, "ABC") 比较值

使用std::string 将等效于strcmp 而不是指针相等

【讨论】:

您介意解释一下它将解决什么问题吗? std::string 将为字符串分配内存,因此会产生副作用。我建议改变你的答案,并提到需要额外的 try/catch。 如果没有内存,你希望 catch 做什么? 您的想法是用具有副作用的代码替换简单的 strcmp 函数。因此,为了您的答案的完整性,您应该解释为什么您的代码可能会失败以及如何处理失败。 正确地说,失败会发生在调用者而不是被调用者,老实说,推动 C 风格对于新程序员来说似乎是个坏主意。同样在 C++ 中,它在技术上是 ::strcmp【参考方案2】:

我做错了什么?

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

使用strcmp(a,b)

【讨论】:

你是说 strncmp 吗?你也没有提到检查空指针。

以上是关于枚举不返回值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

获取枚举值[重复]

枚举很好用啊!为啥阿里不建议返回值用枚举??

枚举很好用啊!为啥阿里不建议返回值用枚举??

声明包含泛型案例的枚举的返回值?

Swift 在一行中返回关联的枚举值或 nil

java 判断返回值为枚举类型