2016-09-28 1 views
-2

Also schreibe ich eine kleine Rock, Paper, Scissors Spielstruktur in C++ und ich bin auf einige Fehler gestoßen, die ich nicht verstehe.C++ Funktionen und merkwürdige Fehler

Der erste ist der Code erwartet ein ';' an der NumberToWord-Funktion, aber es sollte nicht, da es eine Funktion ist.

Ein weiterer Fehler ist zufällig eine der else-Anweisungen, die es nicht zu mögen scheint.

Vielleicht vermisse ich etwas, ich weiß es nicht, aber es sollte eine einfache Lösung sein.

#include <iostream> 
#include <cstdlib> 
#include <iomanip> 
using namespace std; 

int main() 
{ 
    int seed = static_cast <int> (time(0)); //Sets the random seed 
    srand(seed); 

    int winCount = 0; 

    string numberToWord (int x) { 
     string outputChoice; 

     if (x == 0) { outputChoice = "Rock"; } 
     else if (x == 1) { outputChoice = "Paper"; } 
     else if (x == 2) { outputChoice = "Scissors"; } 

     return outputChoice; 
    } 

    while (winCount < 3) { 
     int computerChoice = rand() % 4; 
     int userChoice; 

     cout << userChoice << endl; 

     cout << "Please Enter 0 for Rock, 1 for Paper, or 2 for Scissors: "; //Asks for user input 
     cin >> userChoice; //Inputs user input to variable 

     if (userChoice == computerChoice) { 
      cout << "Compuer Choose: " << numberToWord(computerChoice) << endl; 
      cout << "You Choose: " << numberToWord(userChoice) << endl; 
      cout << "Draw!" << endl; 
     } 
     else if ((userChoice == 1) && (computerChoice == 2)) { //Rock v Paper 
      cout << "Compuer Choose: " << numberToWord(computerChoice) << endl; 
      cout << "You Choose: " << numberToWord(userChoice) << endl; 
      cout << "Compuer wins!" << endl; 
     } 
     else if ((userChoice == 1) && (computerChoice == 3)) { //Rock v Scissors 
      cout << "Compuer Choose: " << numberToWord(computerChoice) << endl; 
      cout << "You Choose: " << numberToWord(userChoice) << endl; 
      cout << "You win!" << endl; 
      winCount += 1; 
     } 
     else if ((userChoice == 2) && (computerChoice == 1)) { //Paper v Rock 
      cout << "Compuer Choose: " << numberToWord(computerChoice) << endl; 
      cout << "You Choose: " << numberToWord(userChoice) << endl; 
      cout << "You win!" << endl; 
      winCount += 1; 
     } 
     else if ((userChoice == 2) && (computerChoice == 3)) { //Paper v Scissors 
      cout << "Compuer Choose: " << numberToWord(computerChoice) << endl; 
      cout << "You Choose: " << numberToWord(userChoice) << endl; 
      cout << "Compuer wins!" << endl; 
     } 
     else if ((userChoice == 3) && (computerChoice == 1)) { //Scissors v Rock 
      cout << "Compuer Choose: " << numberToWord(computerChoice) << endl; 
      cout << "You Choose: " << numberToWord(userChoice) << endl; 
      cout << "Compuer wins!" << endl; 
     } 
     else if ((userChoice == 3) && (computerChoice == 2)) { //Scissors v Paper 
      cout << "Compuer Choose: " << numberToWord(computerChoice) << endl; 
      cout << "You Choose: " << numberToWord(userChoice) << endl; 
      cout << "You win!" << endl; 
      winCount += 1; 
     } 
    } 


    return 0; 
} 

Danke für jede Hilfe!

Errors


Teil 2

einfach das Programm setzt nicht wie die '< <'. Ich benutze das gut in vielen anderen Programmen für Variablen, aber diesmal, wenn ich eine String-Variable verwendet, wirft es einen Fehler. Ich habe C++ - String-Variablen nachgeschlagen und es sieht so aus, als würde ich es richtig machen, weshalb ich den Grund für die Fehler nicht kenne.

Referenzen:

http://www.cplusplus.com/doc/tutorial/basic_io/

http://www.cplusplus.com/doc/tutorial/variables/

void displayOutput(int comp, int user, string winner) { 
    string compOutputChoice = ""; 
    string userOutputChoice = ""; 

    /* 
    if (comp == 0) { compOutputChoice = "Rock"; } 
    else if (comp == 1) { compOutputChoice = "Paper"; } 
    else if (comp == 2) { compOutputChoice = "Scissors"; } 

    if (user == 0) { userOutputChoice = "Rock"; } 
    else if (user == 1) { userOutputChoice = "Paper"; } 
    else if (user == 2) { userOutputChoice = "Scissors"; } 
    */ 

    cout << "Compuer Choose: " << compOutputChoice << endl; 
    cout << "You Choose: " << userOutputChoice << endl; 
    //cout << winner << endl; 

    return; 
} 

Errors:

Error (aktiv) kein Operator "< <" 32

Error (a ctive) keinen Operator "< <" 33

Fehler C2679 binärer '< <': kein Betreiber, die einen rechten Operanden vom Typ nimmt gefunden 'std :: string' (oder gibt es keine akzeptable Umwandlung) 32

Fehler C2679 binär ‚< <‘: fand kein Operator, der einen rechten Operanden vom Typ ‚std :: string‘ nimmt (oder es ist keine akzeptabler Umwandlung) 33

+1

Sie sollten die Fehlermeldungen wörtlich in Ihrer Frage posten - als ** Text **, * nicht * Bild. –

+4

Sie können innerhalb des 'main()' - Funktionskörpers keine andere Funktion definieren, es sei denn, es handelt sich um einen Lambda-Ausdruck. –

+0

Das löst ein Problem, aber ich kann immer noch nicht die Funktion in Übereinstimmung mit cout >> verwenden, um es auszugeben – CTOverton

Antwort

1

die Funktion ist im Innern der string numberToWord (int x)main Funktion geschachtelt . Das ist nicht gültig C++.

Der GCC-Compiler tut unterstützt verschachtelte Funktionen als Erweiterung, aber es ist nicht Teil des Standards und andere Compiler (die ich kenne) akzeptieren es nicht. Tu das einfach nicht. Verschieben Sie die Funktion aus main (oder, wenn es sinnvoll ist, machen Sie es zu einem Lambda).

1

Das Problem ist einfach. numberToWord kann keine interne Funktion von main sein. Verschieben Sie es außerhalb von main oder ändern Sie es in ein Lambda, wenn Sie ein neueres C++ verwenden.

auto numberToWord = [](int x) -> string { 
    string outputChoice; 

    if (x == 0) { outputChoice = "Rock"; } 
    else if (x == 1) { outputChoice = "Paper"; } 
    else if (x == 2) { outputChoice = "Scissors"; } 

    return outputChoice; 
}; 
+0

Nur Problem jetzt kann ich immer noch nicht verwenden: – CTOverton

+0

cout << "Compuer Wählen:" << NummerToWord (ComputerChoice) << endl; – CTOverton

+0

@rext, was meinst du "noch nicht verwenden." Was funktioniert nicht für dich? –