C++-fout: “Expressie moet integraal of enum-type hebben”

Ik krijg de fout “Expressie moet integraal of enum type hebben”op de switch-instructie van mijn (onvolledige) functie hieronder. Ik staarde er al een tijdje naar en kan niet achterhalen wat er aan de hand is. Elk inzicht wordt zeer op prijs gesteld.

std::string CWDriver::eval_input(std::string expr)
{
    std::vector<std::string> params(split_string(expr, " "));
    std::string output("");
    if (params.size() == 0)
    {
        output = "Input cannot be empty.\n";
    }
    else
    {
        switch (params[0])
        {
            case "d":
        }
    }
}

Antwoord 1, autoriteit 100%

De fout is duidelijk. U kunt alleen integraletypen (integer, enum, charetc. gebruiken die converteerbaarnaar integralwaarde), of een expressiedie evalueert tot een integraal type in de switch-instructie.


Antwoord 2, autoriteit 20%

params[0]heeft het type std::string. U kunt het type std::string(dat niet integraal is) niet gebruiken als een switch-parameter. Als je zeker weet dat strings niet leeg zijn, gebruik dan switch (param[0][0])en case 'd'. Maar in dit geval kunt u alleen tekenreeksen van één teken omschakelen. Als u langere strings wilt omschakelen, moet u de volgorde if-else if-else if-...gebruiken.

Other episodes