我正在学习C ++,其中一个程序用于随机数生成器 一旦我编写程序,我就会遇到以下错误:
dice.cpp: In function ‘int main()’:
dice.cpp:18: error: pointer to a function used in arithmetic
dice.cpp:18: error: invalid conversion from ‘int (*)(int)’ to ‘int’
这是我的代码:
#include<iostream>
#include<cmath>
#include<stdlib.h>
#include<time.h>
using namespace std;
int randn(int n);
int main()
{
int q;
int n;
int r;
srand(time(NULL));
cout<<"Enter a number of dice to roll: ";
cin>>n;
cout<<endl;
for (q=1; q<=n; q++)
{
r=randn+1; // <-- error here
cout<<r<<endl;
}
return 0;
}
int randn(int n)
{
return rand()%n;
}
可能是什么问题?
答案 0 :(得分:4)
我相信你的问题就在这一行:
r=randn+1;
我相信你打算写
r = randn(/* some argument */) + 1; // Note parentheses after randn
问题是你试图调用该函数但忘记输入括号表示你正在进行调用。既然你正试图推动六面骰子,那么这应该是
r = randn(6) + 1;
希望这有帮助!
答案 1 :(得分:3)
你有这样的陈述:
r=randn+1;
您可能打算调用 randn
函数,这需要您使用括号并传递实际参数:
r=randn(6)+1; // assuming six-sided dice
如果没有括号,符号randn
引用函数的地址,而C ++不允许对函数指针进行算术运算。函数的类型是int (*)(int)
- 指向接受int并返回int的函数的指针。
答案 2 :(得分:0)
这可能就是答案。
int main()
{
int q;
int n;
int r;
srand(time(NULL));
cout<<"Enter a number of dice to roll: ";
cin>>n;
cout<<endl;
for (q=1; q<=n; q++)
{
r=randn(6)+1; // <-- u forget to pass the parameters
cout<<r<<endl;
}
return 0;
}
int randn(int n)
{
return rand()%n;
}