在C++中,为什么我的指向函数的指针无法初始化
in C++, why my pointer to a function cannot be initialized?
在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 个参数(之间存在签名不匹配
有多个错误/问题,但要继续,您需要先更正上述问题!
相关文章:
- QMetaObject invokeMethod的基于函数指针的语法
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- c++r值引用应用于函数指针
- 模板函数指针和lambda
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 带有类的函数指针
- () 函子后面的括号,而不是函数指针?
- 全局作用域中函数指针的赋值
- 使用"Task"函数指针队列定义作业管理器
- 将成员函数指针作为参数传递给模板方法
- 如何创建对象函数指针C++映射?
- 匹配函数指针作为模板参数?
- 通过函数指针定义类范围之外的方法
- 存储在类中的函数指针
- C++从函数指针数组调用函数
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 整数键映射到头文件中的成员函数指针
- 从类成员函数到类 C 函数指针的转换
- 如何将内联匿名函数分配给C++函数指针
- 将字符缓冲区强制转换为函数指针