这是一段代码,给了我错误:
const char* name = pAttr->Name(); // attribute name
const char* value = pAttr->Value(); // attribute value
switch(name) // here is where error happens: must have integral or enum type
{
case 'SRAD': // distance from focal point to iso center
double D = atof(value);
break;
case 'DRAD': // distance from iso center to detector
break;
default:
break;
}
switch(name)
是发生错误的地方。它说必须是整数或枚举类型。那么,如何在char*
类型上切换大小写或等效形式? 最佳答案
您不能在此处使用switch
;如错误所示,不支持const char*
。这也是一件好事,因为通过指针比较两个C字符串仅比较指针,而不是它们指向的字符串(考虑"hello" == "world"
)。
即使是这样,您也要尝试将C字符串与多字 rune 字进行比较,这当然不是您想要的,尤其是因为它们具有int
类型和实现定义的值;我猜你是要写"SRAD"
,而不是'SRAD'
。
由于您使用的是C++,因此您应该执行以下操作:
const std::string name = pAttr->Name();
const std::string value = pAttr->Value();
if (name == "SRAD") {
double D = atof(value.c_str()); // use std::stod(value) in C++11
// ...
}
else if (name == "DRAD") {
// ...
}
else {
// ...
}
(我还修复了初始化
name
时对D
的使用;雷米(Remy)的权利-您在这里一定要表示value
,因为"SRAD"
可能无法解释为double
。)