这是一段代码,给了我错误:

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。)

10-06 06:40