在C++中,为什么我的指向函数的指针无法初始化

in C++, why my pointer to a function cannot be initialized?

本文关键字:函数 指针 初始化 C++ 为什么 我的      更新时间:2023-10-16

在C++中,为什么我的函数指针无法初始化?

 double (*ptrF)(double&) = NULL;    
 double func(double& x)
 {
     return x*x;
 }
 ptrF= &func; 
 double aFunc(double target, double start, double tolerance, double (*ptrF)(double&) )
 void findSqrt()
{
    double myF = 2.0 ; double myStart = 1.1 ; 
    double t = aFunc(myF, myStart , ptrF); 
    cout << "myF  sqrt root is " << t << endl ; 
 }

我收到错误:

  error: expected constructor, destructor, or type conversion before '=' token
  error: cannot convert 'double (*)(double&)' to 'double' for argument '3' to 'double newton(double, double, double, double (*)(double&))'

谢谢

代码不能在函数外部运行。

这是在尝试运行代码:

ptrF= &func;

这是因为它不是宣言。
如果您将其移动到函数内部,则无法正常工作

或者,您可以在声明点初始化它。

double (*ptrF)(double&) = &func;

参数不足:

 aFunc(myF, myStart ,    ptrF);  
 //                  ^^^^   Missing a double here

请注意,您只传递了三个参数。此功能需要四个。因此,您将函数指针作为仅需要双精度的参数传递。

您有两个单独的错误:

错误:在"="令牌之前进行预期的构造函数、析构函数或类型转换

你不能写作业

ptrF= &func; 

在任何功能之外。 将ptrF声明移到func定义下方,并使其成为初始化您可以按照 alk 的建议在文件范围内编写。 &func中的&也是不必要的。

错误:无法将参数"3"的"double (*)(double&)"转换为"double aFunc(double, double, double, double (*)(double&))"double

">

你只向aFunc传递了三个参数,但它需要四个。 添加一个tolerance参数,"无法转换"错误应该消失。 (我不知道为什么GCC没有给你另一个错误消息,告诉你你给出了错误的参数数量。 它适用于 C.(

你可以

试试这个:

double func(double& x)
{
    return x*x;
}
double (*ptrF)(double&) = func;
...
double t = aFunc(myF, myStart , 0., ptrF); 
双AFnc(双目标,双启动,双

公差,双(*ptrF((双&( (

您是否尝试使用上述行 - 函数声明(或(函数定义?! 无论哪种方式都是错误的/不完整的。

您按如下方式调用aFunc

double t = aFunc(myF, myStart , ptrF); 

我可以看到的一件明显的事情,aFunc的声明/定义方式(根据本文的第一行 - 4 个参数(和调用(3 个参数(之间存在签名不匹配

有多个错误/问题,但要继续,您需要先更正上述问题!