2009-02-09 9 views
0

J'avais quelques problèmes avec mon premier programme C++ (celui-ci) il y a quelque temps. Fondamentalement, j'essaie de faire une affectation pour l'intro en classe C++ où le professeur ne nous a pas enseigné de syntaxe. Voici mon code en ce moment:Pourquoi ai-je des erreurs de compilation "<variable> non déclaré dans cette étendue"?

#include <cstdlib> 
#include <ctime> 
#include <iostream> 
#include <string> 


using namespace std; 
class Race 
{ 
    public: 
    void main() 
    { 

     executeRace(); 

     int randomMove() 
     { 
       srand(time(NULL)); 
       int randomInt = rand() % 100 + 1; 
       return randomInt; 
     } 

     void executeRace() 
     { 
       int rabbitPosition = 1; 
       int turtlePosition = 1; 

       cout << "BANG!!!" << endl << "AND THEY'RE OFF!!!"; 

       while (rabbitPosition <=70 && turtlePosition <=70) 
       { 
         printPositions(rabbitPosition, turtlePosition); 

         turtlePosition = turtleMoveSquares(turtlePosition); 
         rabbitPosition = rabbitMoveSquares(rabbitPosition); 
       } 

       printWinner(rabbitPosition, turtlePosition); 

       tie(rabbitPosition, turtlePosition); 
     } 

     int turtleMoveSquares(int tPosition) 
     { 

       int turtleMove = randomMove(); 

       if(turtleMove >=1 && turtleMove <= 40) 
         tPosition = tPosition + 4; 

       if(turtleMove >= 41 && turtleMove <= 50) 
         tPosition = tPosition - 2; 

       if(turtleMove >=51 && turtleMove <=100) 
         tPosition = tPosition + 2; 

       if(tPosition < 1) 
         tPosition = 1; 

       return tPosition; 
     } 

     int rabbitMoveSquares(int rabbitPosition) 
     { 

       int rabbitMove = randomMove(); 

       if(rabbitMove >=1 && rabbitMove <= 25) 
         rabbitPosition = rabbitPosition; 

       if(rabbitMove >=26 && rabbitMove <= 55) 
         rabbitPosition = rabbitPosition + 10; 

       if(rabbitMove >=56 && rabbitMove <=60) 
         rabbitPosition = rabbitPosition - 15; 

       if(rabbitMove >=61 && rabbitMove <= 90) 
         rabbitPosition = rabbitPosition + 5; 

       if(rabbitMove >=90 && rabbitMove <=100) 
         rabbitPosition = rabbitPosition - 3; 

       if(rabbitPosition < 1) 
         rabbitPosition = 1; 

       return rabbitPosition; 
     } 

     void printPositions(int rabbitPositions, int turtlePositions) 
     { 
       int turtleCount; 
       int rabbitCount; 
       int endCount; 

       if(rabbitPositions == turtlePositions && rabbitPositions != 1) 
       { 
         turtleCount = 1; 

         while(turtleCount < turtlePositions) 
         { 
           cout << "-"; 
           turtleCount = turtleCount+1; 
         } 
         cout << "OUCH!"; 
       } 

       else 
       { 
         turtleCount = 1; 
         rabbitCount = 1; 
         endCount=1; 

         if(turtlePositions < rabbitPositions) 
         { 
           while(turtleCount < turtlePositions) 
           { 
             cout << "-"; 
               turtleCount = turtleCount+1; 
           } 
           cout << "T"; 

           while(rabbitCount < (rabbitPositions - turtlePositions)) 
           { 
             cout << "-"; 
             rabbitCount = rabbitCount+1; 
           } 
           cout << "H"; 

         } 

         if(rabbitPositions < turtlePositions) 
         { 
           while(rabbitCount < rabbitPositions) 
           { 
             cout << "-"; 
               rabbitCount = rabbitCount+1; 
           } 
           cout << "H"; 

           while(turtleCount < (turtlePositions - rabbitPositions)) 
           { 
             cout << "-"; 
             turtleCount = turtleCount+1; 
           } 
           cout << "T"; 

           cout << "\n"; 
         } 
       } 
     } 

     void printWinner(int rabbitPosition, int turtlePosition) 
     { 
       if(turtlePosition >= 70 && rabbitPosition < 70) 
       { 
         cout << "TORTOISE WINS!!! YAY!!!\n"; 
       } 
       else if(rabbitPosition >=70 && turtlePosition < 70) 
       { 
         cout << "Hare wins. Yuch.\n"; 
       } 
       else if(rabbitPosition >=70 && turtlePosition >=70) 
       { 
         cout << "It's a tie\n"; 
       } 
     } 

     void tie(int turtlePosition, int rabbitPosition) 
     { 
       if(rabbitPosition >=70 && turtlePosition >=70) 
         executeRace(); 
     } 

    } 
}; 



int main() 
{ 
    Race race; 
    race.main(); 
    return EXIT_SUCCESS; 
} 

et voici mes erreurs sur la compilation:

uxb3% g++ o- Race Race.cc 
g++: o-: No such file or directory 
g++: Race: No such file or directory 
Race.cc: In member function 'void Race::main()': 
Race.cc:14: error: 'executeRace' was not declared in this scope 
Race.cc:17: error: a function-definition is not allowed here before '{' token 
Race.cc:24: error: a function-definition is not allowed here before '{' token 
Race.cc:44: error: a function-definition is not allowed here before '{' token 
Race.cc:64: error: a function-definition is not allowed here before '{' token 
Race.cc:90: error: a function-definition is not allowed here before '{' token 
Race.cc:153: error: a function-definition is not allowed here before '{' token 
Race.cc:169: error: a function-definition is not allowed here before '{' token 

Désolé de continuer à vous embêter les gars de cette mission, mais il est mon premier et je suis très, très frustré et obsédé en ce moment.

+0

Lorsque vous appelez g ++, vous devez utiliser '-o' au lieu de 'o-', sans guillemets, bien sûr. –

+0

Si vous aviez fait SEULEMENT les changements que j'ai suggérés dans votre question précédente, je pense que vous auriez été bien. Vous essayez d'en faire trop. vous devancez votre cours. –

+0

Mon premier programme C++ était d'environ 5 lignes. Peut-être essayer un bonjour monde? – Skilldrick

Répondre

2

Je pense que vous devriez utiliser gcc -o ..., pas gcc o- ....

Et, d'autre part, vous ne pouvez pas définir des fonctions avec des fonctions en C++.

Déplacez l'autre définition de fonction en dehors de votre classe void main(): en particulier, vous devez déplacer la deuxième dernière accolade avant votre int main() juste avant int randomMove().

8

Vous ne pouvez pas avoir functions inside your functions *.

Vous voulez sans doute ceci:

#include <cstdlib> 
#include <ctime> 
#include <iostream> 
#include <string> 


using namespace std; 
class Race 
{ 
    public: 
    int randomMove() 
    { 
      srand(time(NULL)); 
      int randomInt = rand() % 100 + 1; 
      return randomInt; 
    } 

    void executeRace() 
    { 
      int rabbitPosition = 1; 
      int turtlePosition = 1; 

      cout << "BANG!!!" << endl << "AND THEY'RE OFF!!!"; 

      while (rabbitPosition <=70 && turtlePosition <=70) 
      { 
        printPositions(rabbitPosition, turtlePosition); 

        turtlePosition = turtleMoveSquares(turtlePosition); 
        rabbitPosition = rabbitMoveSquares(rabbitPosition); 
      } 

      printWinner(rabbitPosition, turtlePosition); 

      tie(rabbitPosition, turtlePosition); 
    } 

    int turtleMoveSquares(int tPosition) 
    { 

      int turtleMove = randomMove(); 

      if(turtleMove >=1 && turtleMove <= 40) 
        tPosition = tPosition + 4; 

      if(turtleMove >= 41 && turtleMove <= 50) 
        tPosition = tPosition - 2; 

      if(turtleMove >=51 && turtleMove <=100) 
        tPosition = tPosition + 2; 

      if(tPosition < 1) 
        tPosition = 1; 

      return tPosition; 
    } 

    int rabbitMoveSquares(int rabbitPosition) 
    { 

      int rabbitMove = randomMove(); 

      if(rabbitMove >=1 && rabbitMove <= 25) 
        rabbitPosition = rabbitPosition; 

      if(rabbitMove >=26 && rabbitMove <= 55) 
        rabbitPosition = rabbitPosition + 10; 

      if(rabbitMove >=56 && rabbitMove <=60) 
        rabbitPosition = rabbitPosition - 15; 

      if(rabbitMove >=61 && rabbitMove <= 90) 
        rabbitPosition = rabbitPosition + 5; 

      if(rabbitMove >=90 && rabbitMove <=100) 
        rabbitPosition = rabbitPosition - 3; 

      if(rabbitPosition < 1) 
        rabbitPosition = 1; 

      return rabbitPosition; 
    } 

    void printPositions(int rabbitPositions, int turtlePositions) 
    { 
      int turtleCount; 
      int rabbitCount; 
      int endCount; 

      if(rabbitPositions == turtlePositions && rabbitPositions != 1) 
      { 
        turtleCount = 1; 

        while(turtleCount < turtlePositions) 
        { 
          cout << "-"; 
          turtleCount = turtleCount+1; 
        } 
        cout << "OUCH!"; 
      } 

      else 
      { 
        turtleCount = 1; 
        rabbitCount = 1; 
        endCount=1; 

        if(turtlePositions < rabbitPositions) 
        { 
          while(turtleCount < turtlePositions) 
          { 
            cout << "-"; 
              turtleCount = turtleCount+1; 
          } 
          cout << "T"; 

          while(rabbitCount < (rabbitPositions - turtlePositions)) 
          { 
            cout << "-"; 
            rabbitCount = rabbitCount+1; 
          } 
          cout << "H"; 

        } 

        if(rabbitPositions < turtlePositions) 
        { 
          while(rabbitCount < rabbitPositions) 
          { 
            cout << "-"; 
              rabbitCount = rabbitCount+1; 
          } 
          cout << "H"; 

          while(turtleCount < (turtlePositions - rabbitPositions)) 
          { 
            cout << "-"; 
            turtleCount = turtleCount+1; 
          } 
          cout << "T"; 

          cout << "\n"; 
        } 
      } 
    } 

    void printWinner(int rabbitPosition, int turtlePosition) 
    { 
      if(turtlePosition >= 70 && rabbitPosition < 70) 
      { 
        cout << "TORTOISE WINS!!! YAY!!!\n"; 
      } 
      else if(rabbitPosition >=70 && turtlePosition < 70) 
      { 
        cout << "Hare wins. Yuch.\n"; 
      } 
      else if(rabbitPosition >=70 && turtlePosition >=70) 
      { 
        cout << "It's a tie\n"; 
      } 
    } 

    void tie(int turtlePosition, int rabbitPosition) 
    { 
      if(rabbitPosition >=70 && turtlePosition >=70) 
        executeRace(); 
    } 
}; 

int main() 
{ 
    Race race; 
    race.executeRace(); 
    return EXIT_SUCCESS; 
} 

* À moins traitant des langues de niveau supérieur, comme le calcul, bien sûr!

+0

+1 pour le lien: D – krebstar

3

Options du compilateur:

g++ -o Race Race.cc 

Vous êtes également déclarer des fonctions au sein de votre Race :: fonction principale

class Race 
{ 
    public: 
    void main() 
    { 

     executeRace(); 
    } // <----- add this 
+0

quand je fais cela j'ai des erreurs: Race.cc: Dans la fonction membre 'void Race :: main()': Race.cc:13: erreur: attendu '; ' avant ':' token Race.cc: Au niveau mondial: Race.cc:175: erreur: attendu non qualifié -id avant '}' jeton Race.cc:175: erreur: déclaration attendue avant '}' jeton –

+0

corrigé 2 erreurs, mais toujours obtenir: Race.cc: Dans la fonction membre 'void Race :: main()': Race.cc:13: erreur: attendu '; ' avant ':' jeton –

+0

nvm, l'a corrigé. J'ai eu un ':' au lieu d'un ';' dans un endroit. Compilé bien. Je vais essayer de le faire maintenant. –

1

Vous voulez tirer les différentes fonctions qui sont au moment inclus dans le Main() fonction définie dans Race (à l'intérieur de ses accolades).

Sélectionnez-les, Ctrl-X (Couper), déplacez-vous au-dessus de la déclaration main(), Ctrl-V (Coller). Reformater. Recompiler

+0

Ou il peut simplement déplacer l'accolade de fin.De plus, copier/coller est spécifique à l'éditeur. =] – strager

Questions connexes