我一直收到错误:无法解析函数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;
}
}
答案 0 :(得分:1)
编译器在看到main()中对它的引用之前还没有看到roll()函数定义。将主声明移动到文件的底部。
答案 1 :(得分:1)
一些问题。
1)在void roll()
之前放置前置声明main
原型,让编制者了解roll.
2)int dice [5]
小到保留6个元素 - 它将调用未定义的行为。
3)无需使用全局数组dice
。
4)您可能需要seed
随机生成器,否则每次运行程序时都会收到相同的数字。
#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;
}
}
输出:
584
287
178
116
594
536
答案 2 :(得分:0)
在调用之前尝试将roll放在main之上。
或者,您可以声明void roll();在main之上并在之后定义它。
答案 3 :(得分:0)
我最初认为这个问题是重复的。令我惊讶的是,我在搜索StackOverflow时找不到C ++标记的副本。所以我发布了一个答案。
至少,C ++编译器需要在第一次调用之前在同一个编译单元中看到函数的声明。
这意味着,在roll()
调用main()
之前,需要声明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()
的定义移到其他地方(例如,移动到另一个源文件),那么在{{1}之前重新引入roll()
的声明仍然是必要的。 }}