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

invalid conversion from ‘int (*)(int)’ to ‘int’ error?

本文关键字:int 转换 错误 无效      更新时间:2023-10-16

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

有什么问题吗?

我认为你的问题出在这一行:

r=randn+1;

我相信你是想写

r = randn(/* some argument */) + 1; // Note parentheses after randn

问题是,你试图调用函数,但忘记放入括号,表明你正在进行调用。因为你要掷一个六面骰子,这应该是

r = randn(6) + 1;

希望这对你有帮助!

你有这样的语句:

r=randn+1;

您可能想要调用 randn函数,这需要您使用括号并传递一个实际的参数:

r=randn(6)+1; // assuming six-sided dice

如果没有括号,符号randn指的是函数的地址, c++不允许对函数指针进行算术运算。该函数的类型为int (*)(int)——指向接受int型并返回int型的函数的指针。

这可能就是答案。

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