Вы не можете. Выражение после case
в операторе switch должно быть интегральной константой времени компиляции. Таким образом, литерал (42
), const int variable инициализируется литералом (const int x = 66
... case x:
) или значением перечисления. И вот об этом.
Причина, по которой это так строго, является эффективностью. Компиляторы обычно создают ярлыки для каждого case
, и если вы знаете значение для каждой метки во время компиляции, вы можете сделать несколько хороших оптимизаций, чтобы избежать большей части служебных данных, которые имеет нормальное разветвление кода.
В вашем случае просто пойти с, если-то еще:
if(b == a["someStr1"]) {
//...
} else if(b == a["someStr2"]) {
//...
} // and so on
Вероятно, ошибка при компиляции объясняет, почему. – RvdK
Коммутатор работает только с ординалами, такими как ints http://www.cplusplus.com/faq/sequences/strings/switch-on-string/, вам нужно выполнить сравнение '==', например 'if (" someStr1 "== а) {сделать что-то; } ' – EdChum
вы можете добавить ошибку, которую вы получили во время компиляции –