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

时间:2012-01-09 19:08:38

标签: c++ linux pointers function-pointers

在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&))'

感谢

4 个答案:

答案 0 :(得分:2)

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

这是试图运行代码:

ptrF= &func;

这是因为它不是声明 如果你把它移到一个函数里面就不行了

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

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

参数不足:

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

请注意,您只传递了三个参数。这个功能需要四个。所以你将函数指针作为一个只期望加倍的参数传递。

答案 1 :(得分:1)

你可以试试这个:

double func(double& x)
{
    return x*x;
}

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

...

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

答案 2 :(得分:1)

你有两个不同的错误:

  

错误:在“=”标记

之前的预期构造函数,析构函数或类型转换

你不能写作业

ptrF= &func; 

任何功能之外。将ptrF的声明移到func的定义之下,并将其设为初始化,而可以在文件范围内写入,如同建议的那样。 <{1}}中的&也是不必要的。

  

错误:无法将参数'3'的'&func'转换为'double (*)(double&)'到'double'

您只向double aFunc(double, double, double, double (*)(double&))传递了三个参数,但它需要四个参数。添加aFunc参数,“无法转换”错误应该消失。 (我不知道为什么GCC不会给你另一个错误信息,告诉你你给出了错误的参数数量。它适用于C语言。)

答案 3 :(得分:0)

  

double aFunc(double target,double start,double tolerance,double(* ptrF)(double&amp;))

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

您正在调用aFunc,如下所示:

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

我可以看到一个显而易见的事情,aFunc声明/定义的方式(根据此帖子中的第一行--4个参数)和被调用(3个参数)之间存在签名不匹配

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