2013-04-30 17 views
8

グラフィックスを実装しようとしていますが、非常に下に表示されている関数int rollDice()を呼び出す際に問題があります。任意のアイデア...私はエラーエラーC3861を取得しています: '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; 
} 

OnBnClickedButton1rollDice関数の定義を移動する機能rollDice

int rollDice(); 
OnBnClickedButton1

または単にの

+3

右の関連リンクから取ったhttp://stackoverflow.com/questions/12723107/error-c3861-initnode-identifier-not-found?rq=1 – chris

+1

答えを含めるために質問を編集したのはなぜですか?質問は今や意味をなさない。 – caps

答えて

25

コンパイラはファイルの最初から最後まで、つまり関数の定義の配置が重要であることを意味します。それが初めて使用される前に、このケースでは、この関数の定義を移動することができ、次のいずれか

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();は異なる関数ですが、戻り値だけが異なるため、同じスコープ内に存在することはできません(詳細はFunction Overloadingを参照)。

+0

'void'の順序を変更するまでプロジェクトが機能しませんでした。ありがとう!!! +1。 –

2

入れ宣言を更新しました。

OnBnClickedButton1の中にrollDiceを呼び出すと、その理由があなたの現在のコードにありますが、その機能はコンパイラによってまだ認識されていません。そのため、identifier not foundというエラーが表示されます。