【问题标题】:C++: how to switch through arguments?C++:如何通过参数切换?
【发布时间】:2011-05-12 07:57:20
【问题描述】:

所以我有类似的代码

 int main(int argc, char* argv[])
{ 
    string outputUrl ;
    string outputContainer ;
    string outputUserName ;

    for(int i = 0 i>=argc; i+2){
        switch(argv[i]){ //C2450
            case "-server" : {outputUrl += (argv[i+1]);} break; //C2051
            case "-container" : {outputContainer = (argv[i+1]);} break; //C2051
            case "-nickname" : {outputUserName += (argv[i+1]);} break; //C2051
    }
}

为什么它给我编译器错误 C2450 和下一行 C2051? 如何解决这种问题?

【问题讨论】:

    标签: c++ visual-studio visual-studio-2008 command-line command-line-arguments


    【解决方案1】:

    switch 语句不能使用字符串。您需要将其替换为 if-else if 语句字符串。

    【讨论】:

      【解决方案2】:

      C 和 C++ switch 语句仅对整数类型进行操作。您可以执行一些操作,例如将指针转换为 int(实际上您正在打开指针),但您仍然不会在此处获得想要的“打开字符串”行为。

      Why no switch on pointers?

      【讨论】:

        【解决方案3】:

        您可以打开数字,而不是指向字符串的指针。我认为您正在从另一种语言过渡?

        另外,i+2 应该是 i+=2。

        另外,i>=argc 应该是 i

        【讨论】:

        • 是的,for 声明完全被破坏了,不是吗?我没注意到。
        • 我实际上开始写“从哪里开始......”
        【解决方案4】:

        您不能打开字符串,只能打开整数类型。你必须明确地 if/else 每一个。其次,break 发生在 case 语句内部,而不是外部。

        【讨论】:

        • 休息没有问题;只是每个案例都有一组多余的括号。
        【解决方案5】:

        can't switch on a string,或其他任何不是整数或不能转换为整数的东西。请改用三个“if”语句。

        【讨论】:

          【解决方案6】:

          使用 getopt 之类的东西。有一个很好的(但不完整的)实现:http://www.codeproject.com/KB/cpp/xgetopt.aspx?msg=614581。或者使用 boost.Program_options:http://www.boost.org/doc/libs/1_41_0/doc/html/index.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-06
            • 1970-01-01
            • 1970-01-01
            • 2013-08-07
            • 1970-01-01
            • 1970-01-01
            • 2014-11-10
            • 2019-06-17
            相关资源
            最近更新 更多