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)。它仍然没有返回正确的值。我做错了什么?
答案 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)