C ++: как переключаться между аргументами? - PullRequest
0 голосов
/ 19 ноября 2010

Итак, у меня есть код вроде

 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? Как исправить такую ​​вещь?

Ответы [ 6 ]

3 голосов
/ 19 ноября 2010

Оператор switch не может использовать строки.Вам нужно будет заменить его строкой if - else if операторов вместо.

2 голосов
/ 19 ноября 2010

Вы можете включать числа, а не указатели на строки.Я так понимаю, вы переходите с другого языка?

Кроме того, i + 2 должно быть i + = 2.

Кроме того, i> = argc должно быть i

2 голосов
/ 19 ноября 2010

C и C ++ switch операторы работают только с целочисленными типами.Вы можете сделать некоторые вещи, такие как приведение указателя к int (и на самом деле вы переключаете указатели), но вы все равно не получите «переключение строк», как вы хотели бы здесь.

Почему нет указателей?

1 голос
/ 19 ноября 2010

Используйте что-то вроде 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.

1 голос
/ 19 ноября 2010

Вы не можете включить строку или что-либо еще, что не является целым числом или не может быть преобразовано в единицу.Вместо этого используйте три оператора "if".

1 голос
/ 19 ноября 2010

Вы не можете включать строки, только целочисленные типы.Вам придется явно, если / иначе каждый.Во-вторых, разрыв происходит внутри оператора case, а не снаружи.

...