оператор switch / case в C ++ с типом QString - PullRequest
25 голосов
/ 28 марта 2011

Я хочу использовать switch-case в моей программе, но компилятор выдает мне эту ошибку:

switch expression of type 'QString' is illegal

Как я могу использовать оператор switch с QString?

Мой код выглядит следующим образом:

bool isStopWord( QString word )
{
bool flag = false ;

switch( word )
{
case "the":
    flag = true ;
    break ;
case "at" :
    flag = true ;
    break ;
case "in" :
    flag = true ;
    break ;
case "your":
    flag = true ;
    break ;
case "near":
    flag = true ;
    break ;
case "all":
    flag = true ;
    break ;
case "this":
    flag = true ;
    break ;
}

return flag ;
}

Ответы [ 13 ]

0 голосов
/ 28 марта 2011
case "the":
    //^^^ case label must lead to a constant expression

Мне не известно о qt , но вы можете попробовать. Вы можете избежать switch и напрямую использовать == для сравнения, если QString не отличается от нормального std::string.

if( word == "the" )
{
   // ..
}
else if( word == "at" )
{
   // ..
}
// ....
0 голосов
/ 28 марта 2011

Он идентичен оператору переключения C ++.

switch(var){
  case(option1):
      doesStuff();
      break;
  case(option2):
     etc();
     break;
}
0 голосов
/ 28 марта 2011

Это не имеет ничего общего с Qt, равно как и с цветом ваших носков.

С ++ Синтаксис переключателя выглядит следующим образом:

char c = getc();
switch( c ) {
case 'a':
    a();
    break;
case 'b':
    b();
    break;
default:
    neither();
}

Если это не поможет, пожалуйста, подробно перечислите сообщение об ошибке, возможно, вместе с цветом ваших носков.

Редактировать : чтобы ответить на ваш ответ, вы не можете использовать switch с нецелыми типами. В частности, вы не можете использовать типы классов. Не объекты типа QString и не объекты любого другого типа. Вместо этого вы можете использовать конструкцию if-else if-else, или вы можете использовать полиморфизм времени исполнения или компиляции, или перегрузку, или любой из массива альтернатив switch.

...