2016-04-20 13 views
0

Ich bin neu in der Codierung, also werde ich versuchen, so gut wie möglich zu erklären.C++ - Hilfe ein Objekt in eine andere Funktion übergeben (Objekt in Main definiert)

Dies ist der Fehler, den ich bekommen haben:

// Initialising the players 
Player Joe; 
Player Sid; 

Joe.setPlayerName("Joe"); 
Sid.setPlayerName("Sid"); 

Joe.setPercentage(71); 
Sid.setPercentage(73); 

Joe.setTotal(501); 
Sid.setTotal(501); 

Joe.setThrows(0); 
Sid.setThrows(0); 


// Starts Joe's turn (and the game) 
turn(Joe); 

nun innerhalb einer anderen Funktion den folgenden Code-Abschnitt calculateTotal, die ich habe, genannt:

1>f:\abertay\programming\coursework\coursework\source.cpp(149): error C2065: 'Sid' : undeclared identifier 
1>f:\abertay\programming\coursework\coursework\source.cpp(153): error C2065: 'Joe' : undeclared identifier 
1>f:\abertay\programming\coursework\coursework\source.cpp(169): error C2065: 'Sid' : undeclared identifier 
1>f:\abertay\programming\coursework\coursework\source.cpp(173): error C2065: 'Joe' : undeclared identifier 

Meine main Funktion wie folgt aussieht:

else if (potentialTotal < 2 && potentialTotal != 0) 
{ 
    potentialTotal = total; // Total remains the same 
    player.setThrows(0); // Resets their throws 

    // Switch player's turn 
    if (player.getPlayerName() == "Joe") 
    { 
     turn(Sid); 
    } 
    else if (player.getPlayerName() == "Sid") 
    { 
     turn(Joe); 
    } 
} 

Das Problem, das ich habe, ist th ist, die Sid in turn(Sid) sowie Joe in turn(Joe) nicht funktionieren, das ist, weil sie in der main und nicht die Funktion erklärt werden, bin ich mir bewusst. Ich weiß jedoch nicht, wie ich das richtig beheben kann.

ich das Player Objekt durchlaufen haben wie in calculateTotal Funktion gesehen - player.getPlayerName() zum Beispiel, aber wenn ich turn(player) setzen, würde dies turn(Joe) nennen, wie er zum ersten Mal geht das ist nicht das, was ich brauche, muss ich es Sid wechseln.

Wenn Sie zusätzliche Informationen benötigen, wenden Sie sich bitte an.

EDIT:

ich die Funktionen Programm enthalten sind, zu sehen, ob das überhaupt hilft.

void turn(Player& player); 

void bullseye(Player& player); 

void singleThrow(int requiredValue, Player& player); 
void doubleThrow(int dartThrow, Player& player); 
void trebleThrow(int dartThrow, Player& player); 

void calculateTotal(Player& player); 

Vielen Dank im Voraus!

P.S. Versuchen Sie nicht, erweiterte Terminologie zu verwenden, ich habe gerade erst angefangen zu programmieren, also werde ich wahrscheinlich nicht verstehen.

+2

[mcve] bitte. Ich denke, dein Code ist klein genug, dass alles hier passt. – AndyG

+0

Es klingt wie Sie vielleicht Ihr Design überdenken möchten. Wenn Sie Objekte in 'main' benötigen, übergeben Sie sie normalerweise an eine andere Funktion. Es klingt jedoch so, als wären diese Objekte "global". Betrachten Sie vielleicht einen objektorientierten Ansatz, bei dem 'Joe' und' Sid' Mitglieder eines größeren Objekts sind. Dann übergeben Sie dieses Objekt (statt aller Variablen separat) an Funktionen. – AndyG

+0

Es würde helfen, Ihre Deklaration der Berechnungen zu sehen. Ich vermute, dass Sie einen Zeiger auf das Spielerobjekt als Argument verwenden müssen, anstatt das Spielerobjekt selbst zu übergeben. – BHawk

Antwort

0

Pass eine Referenz

Wenn Sie Ihre Objekte in der Haupt erstellen und wollen keine Kopien der Objekte (was der Fall zu sein scheint), übergeben Sie einen Referenz auf die Objekte in Ihrem main auf Ihre calculations Funktion:

void calculations(Player& Joe, Player& Sid) 
{ 
    //... 
    else if (potentialTotal < 2 && potentialTotal != 0) 
    { 
     potentialTotal = total; // Total remains the same 
     player.setThrows(0); // Resets their throws 

     // Switch player's turn 
     if (player.getPlayerName() == "Joe") 
     { 
      turn(Sid); 
     } 
     else if (player.getPlayerName() == "Sid") 
     { 
      turn(Joe); 
     } 
    } 
    //... 
} 

Wenn Sie nicht vertraut sind, eine Referenz sind, ist einfach ein anderer Name für ein Objekt, wird es Ihre Player Objekte, anstatt nicht kopieren, calculations func Diese wird sich auf die Objekte in der main Funktion beziehen.

+0

Danke für den Vorschlag, aber ich habe ein Problem damit. Ich habe bereits 'Player & player' in diese Funktion übernommen, wenn ich' Joe' und 'Sid' hinzufüge, konfligiert es mit anderen Funktionen, die auf die' calculateTotal' Funktion angewiesen sind, da ich nicht sicher bin, was sonst mit 'calculateTotal 'passieren soll (Spieler) '. – Expozzia

Verwandte Themen