C++ 为什么不是';这不是我的程序编译

C++ 为什么不是';这不是我的程序编译,c++,C++,我一直收到一个错误:无法解析函数roll。我不确定这是因为范围,如果是,我该如何修复它 #include <iostream> #include <cstdlib> using namespace std; int main() { roll(); } int playerSum = 0; int dice [5]; void roll(){ for(int i =0;i<6;i++){ int randNum = rand()%60

我一直收到一个错误:无法解析函数
roll
。我不确定这是因为范围,如果是,我该如何修复它

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {

    roll();
}

int playerSum = 0;
int dice [5];

void roll(){
  for(int i =0;i<6;i++){
      int randNum = rand()%600 + 1;
      dice[i]= randNum;
      cout<<dice[i]<<endl;
    }
}
#包括
#包括
使用名称空间std;
int main(){
滚动();
}
int playerSum=0;
整数骰子[5];
无效卷(){

对于(inti=0;i在调用之前,请尝试将辊放在主辊上方


或者,您可以在main()上声明void roll();然后再定义它。

编译器在main()中看到对它的引用之前,还没有看到roll()函数定义。请将main声明移到文件底部。

一些问题

1) 将前向声明
void roll()
prototype放在
main
之前,让编译器知道
滚动。

2)
int dice[5]
太小,无法保存6个元素-它将调用未定义的行为

3) 无需使用全局数组
dice

4) 您可能需要
种子
随机生成器,否则每次运行程序时都会收到相同的数字

#include <iostream>
#include <cstdlib>

using namespace std;

void roll();

int main() {

    roll();
    return 0;
}

void roll(){
    int dice[6];
    int randNum; 

    for(int i =0; i<6; i++){
        randNum = rand()%600 + 1;
        dice[i] = randNum;
        cout<< dice[i] <<endl;
    }
}
我最初认为这个问题是重复的。令我惊讶的是,在StackOverflow的搜索中,我找不到一个C++标记的重复项。所以我发布了一个答案

至少,C++编译器需要在调用第一个调用之前在同一编译单元中看到函数的声明。 这意味着,在调用

main()
中的
roll()
之前,需要声明
roll()

void roll();       //  declaration of roll()

int main()
{
     roll();
}

void roll()      //  definition of roll()
{
     //   your code 
}
这种方法(不是定义的声明,放在调用函数的代码之前)的优点是,如果需要,
roll()
的定义可以移动到另一个编译单元(也称为源文件)(当然,假设构建过程根据需要正确编译所有源文件和链接对象文件)

定义在形式上是一种声明类型,因此另一种方法是将
main()
移动到源文件的末尾

void roll();     // declaration of roll()

void roll()      //  definition of roll()
{
    //   your code 
}

int main()
{
     roll();
}

从技术上讲,在这种情况下可以删除
roll()
的声明,因为定义是一种声明类型。这样做的一个缺点是,如果有人随后决定将
roll()
的定义移到其他地方(例如,移到另一个源文件)然后,仍然需要在
main()
之前重新引入
roll()
声明,并在main()之前提出一个前向声明
void roll();
void roll();     // declaration of roll()

void roll()      //  definition of roll()
{
    //   your code 
}

int main()
{
     roll();
}