在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&))'
感谢
答案 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个参数)之间存在签名不匹配
有多个错误/问题,但要继续进行,您需要先纠正上述问题!