从'int(*)(int)'到'int'错误的无效转换?

时间:2011-08-11 20:18:33

标签: c++

我正在学习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;
}

可能是什么问题?

3 个答案:

答案 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;
}