错误C3861: 'rollDice':未找到标识符

8

我正在尝试实现一些图形,但是在调用底部显示的函数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;
} 

更新完毕


3
从右侧相关链接中获取,http://stackoverflow.com/questions/12723107/error-c3861-initnode-identifier-not-found?rq=1 - chris
2
你为什么编辑问题并包含答案?现在这个问题没有意义了。 - caps
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(); 是不同的函数,但由于它们仅在返回值上有所不同,因此它们不能存在于同一范围内(有关更多信息,请参见函数重载)。


3

放置函数rollDice的声明

 int rollDice();

OnBnClickedButton1 之前定义 rollDice 函数,或者直接将函数定义移动到 OnBnClickedButton1 之前。

原因是在当前的代码中当你在 OnBnClickedButton1 中调用 rollDice 时,编译器还没有看到该函数,所以你会看到 identifier not found 错误。


因为被调用的函数放在调用函数之后,所以出现了相同的错误。改变顺序解决了问题。 - Broken_Window

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接