8

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

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

更新しました

4

2 に答える 2

30

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

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()
{
    ...
}

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

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

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

于 2013-04-30T01:40:40.163 に答える
3

関数の宣言を入れるrollDice

 int rollDice();

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

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

于 2013-04-30T01:40:21.867 に答える