いくつかのグラフィックを実装しようとしていますが、一番下に表示されている関数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;
}
更新しました
コンパイラはファイルを最初から最後まで調べます。つまり、関数の定義の配置が重要です。この場合、最初に使用する前に、この関数の定義を移動できます。
_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();
は異なる関数ですが、戻り値のみが異なるため、同じスコープ内に存在することはできません(詳細については、 関数のオーバーロード を参照してください)。 =)。
関数の宣言を置くrollDice
int rollDice();
OnBnClickedButton1
の前、または単にrollDice
関数の定義をOnBnClickedButton1
の前に移動します。
その理由は、OnBnClickedButton1
内でrollDice
を呼び出したときの現在のコードにあり、関数はまだコンパイラーによって認識されていません。そのため、identifier not found
エラーが発生しました。