Frage

So habe ich Code wie

 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
    }
}

Warum ist es mir Compiler-Fehler C2450 und C2051 nächste Zeile? Wie so etwas zu beheben?

War es hilfreich?

Lösung

Die switch Anweisung kann keine Strings verwenden. Sie werden es mit einer Reihe von if-else if Aussagen ersetzen müssen statt.

Andere Tipps

C und C ++ switch Aussagen arbeiten nur auf ganzzahlige Typen. Sie können wie Gießen der Zeiger auf ein int ein paar Sachen zu tun (und in der Tat Sie auf Zeiger wechseln), aber Sie sind immer noch nicht Verhalten bekommen ‚auf Strings Schalt‘ wie Sie hier wollen.

Warum kein Schalter auf Zeiger?

Sie können auf Zahlen wechseln, nicht auf Zeiger auf Strings. Ich nehme an, du bist Übergang von einer anderen Sprache?

Auch i + 2 sollte i + = 2.

Auch i> = argc soll ich sein

Sie können nicht auf Saiten wechseln, nur Integer-Typen. Sie werden, wenn / sonst jeder explizit haben. Zweitens Bruch tritt in der Case-Anweisung, nicht außerhalb.

Sie wechseln können nicht auf eine Zeichenfolge , oder irgendetwas anderes, das nicht eine ganze Zahl ist oder nicht auf einem umgewandelt werden. Verwenden Sie drei "if" Anweisungen statt.

Verwenden Sie so etwas wie getopt. Es gibt eine schöne (aber nicht vollständig) Umsetzung: http: // www. codeproject.com/KB/cpp/xgetopt.aspx?msg=614581 . Oder nutzen boost.Program_options: http://www.boost.org /doc/libs/1_41_0/doc/html/index.html .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top