C++中使用QString类型的switch/case语句

39

我想在我的程序中使用 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 ;
}

3
请贴出出现问题的代码以及编译器所给出的“精确”错误信息。我们无法猜测您做错了什么。 - Mat
一个在Qt中的switch语句就像任何C++中的switch语句一样。您需要发布展示您遇到问题的代码。 - Håvard S
http://stackoverflow.com/help/accepted-answer - phuclv
@HåvardS 除了在 Qt 中有一种特殊的方法可以打开字符串。 - phuclv
对于任何阅读此代码的人来说,很明显可以将其转换为使用“||”的一行代码,或者更不明显但可能更清晰的是在集合中检查包含。 - user4945014
14个回答

0
我建议使用if和break。这将使计算接近于switch case。
QString a="one"
if (a.contains("one"))
{

   break;
}
if (a.contains("two"))
{

   break;
}

-2

这与Qt无关,就像与你袜子的颜色无关一样。

C++的switch语法如下:

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

如果这不能帮助您,请详细列出错误消息,可能还包括您袜子的颜色。
编辑:针对您的回复,您不能使用非整数类型的switch语句。特别是,您不能使用类类型。不能使用QString类型的对象或任何其他类型的对象。您可以改用if-else if-else结构,或者您可以使用运行时或编译时多态性、重载或任何一系列替代switch的选择。

1
我穿着一只黑袜子和一只白袜子,这似乎可以解决我所有的开关问题。 - Jake Kalstad
1
我有一个TCP套接字和一个UDP套接字,但它们一点也没有帮助 :( - Jeremy Friesner
2
QMetaEnum让你可以使用字符串进行切换。因此,这与Qt有关。 - phuclv

-3

看看这个,它对我有帮助

int main(int, char **)
{
    static const uint red_hash = 30900;
    static const uint green_hash = 7244734;
    static const uint blue_hash = 431029;
  else  
    static const uint red_hash = 112785;  
    static const uint green_hash = 98619139;  
    static const uint blue_hash = 3027034;
  endif

    QTextStream in(stdin), out(stdout);
    out << "Enter color: " << flush;
    const QString color = in.readLine();
    out << "Hash=" << qHash(color) << endl;

    QString answer;
    switch (qHash(color)) {
    case red_hash:
        answer="Chose red";
        break;
    case green_hash:
        answer="Chose green";
        break;
    case blue_hash:
        answer="Chose blue";
        break;
    default:
        answer="Chose something else";
        break;
    }
    out << answer << endl;
}

1
你的代码甚至无法编译。elseendif是无效的。 - phuclv

-4

它与C++的switch语句完全相同。

switch(var){
  case(option1):
      doesStuff();
      break;
  case(option2):
     etc();
     break;
}

在C++中,switch语句只适用于整数类型而不是字符串。 - phuclv
1
@JakeKalstad 兄弟,这个问题就是要解决字符串的问题,所以现在还不起作用! - Mahdi Khalili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接