枚举不返回值[重复]
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::string
的operator==
将比较值。
本机指针将==
解释为在同一个地方。如果您想比较您正在使用的旧 C 风格的值,请查看 strcmp
。为了安全起见,您实际上应该使用std::strncmp
,并将长度作为可接受值的最大长度多出 1 来传递。
text ---> 0x1234 [ABC]
"ABC" --> 0x2345 [ABC]
0x1234 != 0x2345
但strcmp(text, "ABC")
比较值
使用std::string
将等效于strcmp
而不是指针相等
【讨论】:
您介意解释一下它将解决什么问题吗? std::string 将为字符串分配内存,因此会产生副作用。我建议改变你的答案,并提到需要额外的 try/catch。 如果没有内存,你希望 catch 做什么? 您的想法是用具有副作用的代码替换简单的 strcmp 函数。因此,为了您的答案的完整性,您应该解释为什么您的代码可能会失败以及如何处理失败。 正确地说,失败会发生在调用者而不是被调用者,老实说,推动 C 风格对于新程序员来说似乎是个坏主意。同样在 C++ 中,它在技术上是::strcmp
【参考方案2】:
我做错了什么?
您是在比较两个字符串的地址,而不是比较它们的内容。
使用strcmp(a,b)
【讨论】:
你是说 strncmp 吗?你也没有提到检查空指针。以上是关于枚举不返回值[重复]的主要内容,如果未能解决你的问题,请参考以下文章