web-dev-qa-db-fra.com

erreur C3861: 'rollDice': identifiant non trouvé

J'essaie d'implémenter certains graphiques, mais j'ai du mal à appeler la fonction int rollDice () indiquée tout en bas et je ne sais pas comment résoudre ce problème? toutes les idées ... Je reçois une erreur erreur C3861: 'rollDice': identifiant non trouvé.

int rollDice();

    void CMFCApplication11Dlg::OnBnClickedButton1()
{ 

   enum Status { CONTINUE, WON, LOST }; 
   int myPoint; 
   Status gameStatus;  
   srand( (unsigned)time( NULL ) ); 
   int sumOfDice = rollDice();

   switch ( sumOfDice ) 
   {
      case 7: 
      case 11:  
        gameStatus = WON;
        break;

      case 2: 
      case 3: 
      case 12:  
        gameStatus = LOST;
        break;
      default: 
            gameStatus = CONTINUE; 
            myPoint = sumOfDice;  
         break;  
   } 
   while ( gameStatus == CONTINUE )
   { 
      rollCounter++;  
      sumOfDice = rollDice(); 

      if ( sumOfDice == myPoint ) 
         gameStatus = WON;
      else
         if ( sumOfDice == 7 ) 
            gameStatus = LOST;
   } 


   if ( gameStatus == WON )
   {  

   }
   else
   {   

   }
} 

int rollDice() 
{
   int die1 = 1 + Rand() % 6; 
   int die2 = 1 + Rand() % 6; 
   int sum = die1 + die2; 
   return sum;
} 

mis à jour

8
Mac

Le compilateur parcourt vos fichiers du début à la fin, ce qui signifie que le placement de la définition de votre fonction est important. Dans ce cas, vous pouvez soit déplacer la définition de cette fonction avant sa première utilisation:

void rollDice()
{
    ...
}

void otherFunction()
{
    // rollDice has been previously defined:
    rollDice();
}

ou vous pouvez utiliser forward declaration pour indiquer au compilateur qu'une telle fonction existe:

// function rollDice with the following prototype exists:
void rollDice();

void otherFunction()
{
    // rollDice has been previously declared:
    rollDice();
}

// definition of rollDice:
void rollDice()
{
    ...
}

Notez également que le prototype de fonction est spécifié par name , mais aussi return value et parameters :

void foo();
int foo(int);
int foo(int, int);

c'est ainsi que les fonctions sont distinguées . int foo(); et void foo(); sont des fonctions différentes. Toutefois, comme elles ne diffèrent que par leur valeur de retour, elles ne peuvent pas exister dans la même portée (pour plus d'informations, voir Function Overloading ). 

27
LihO

Mettez la déclaration de la fonction rollDice

 int rollDice();

before OnBnClickedButton1 ou déplacez simplement la définition de la fonction rollDice avant OnBnClickedButton1.

La raison en est dans votre code actuel lorsque vous appelez rollDice dans OnBnClickedButton1, la fonction n’a pas encore été vue par le compilateur, c’est pourquoi vous avez vu cette erreur identifier not found.

3
taocp