web-dev-qa-db-ja.com

エラーC3861: 'rollDice':識別子が見つかりません

いくつかのグラフィックを実装しようとしていますが、一番下に表示されている関数int rollDice()の呼び出しに問題があり、これを解決する方法がわかりませんか?任意のアイデア...エラーエラーが発生しますC3861: 'rollDice':識別子が見つかりません。

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

更新しました

8
Mac

コンパイラはファイルを最初から最後まで調べます。つまり、関数の定義の配置が重要です。この場合、最初に使用する前に、この関数の定義を移動できます。

_void rollDice()
{
    ...
}

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

または、前方宣言を使用して、そのような関数が存在することをコンパイラーに通知できます。

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

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

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

また、関数プロトタイプはnameで指定されますが、戻り値でも指定されることに注意してください。およびパラメータ

_void foo();
int foo(int);
int foo(int, int);
_

これが関数の区別です。 int foo();void foo();は異なる関数ですが、戻り値のみが異なるため、同じスコープ内に存在することはできません(詳細については、 関数のオーバーロード を参照してください)。 =)。

27
LihO

関数の宣言を置くrollDice

 int rollDice();

OnBnClickedButton1の前、または単にrollDice関数の定義をOnBnClickedButton1の前に移動します。

その理由は、OnBnClickedButton1内でrollDiceを呼び出したときの現在のコードにあり、関数はまだコンパイラーによって認識されていません。そのため、identifier not foundエラーが発生しました。

3
taocp