Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递成员函数指针_C++_Function Pointers - Fatal编程技术网

C++ 传递成员函数指针

C++ 传递成员函数指针,c++,function-pointers,C++,Function Pointers,我的情况如下,我有两个不同的二分法函数,它们将在我的代码中的某个点被调用。基本上有些函数调用二分法2,这个函数调用传递的函数或者将函数指针传递给二分法函数 在头球我有 std::vector<double> F(); double F1(double m1, double m2); double F2(double m1, double m2); typedef double (MyClass::*MyClassFn)(double,double); double Bisection

我的情况如下,我有两个不同的二分法函数,它们将在我的代码中的某个点被调用。基本上有些函数调用二分法2,这个函数调用传递的函数或者将函数指针传递给二分法函数

在头球我有

std::vector<double> F();
double F1(double m1, double m2);
double F2(double m1, double m2);
typedef double (MyClass::*MyClassFn)(double,double);
double Bisection(MyClassFn fEval,double min, double max,std::vector<double> args);
bool Bisection2(MyClassFn fEval1,MyClassFn fEval2,double xmin, double xmax, double ymin, double ymax,double *ax, double *ay,std::vector<double> args);
我试着从这里寻求帮助 还检查了这些论坛中可能解决的不同问题,但仍然无法找出我做错了什么


谢谢。

正如错误消息所说,您需要括号。这是因为函数调用的优先级高于
->*
运算符:

leftvalue = (pObj->*fEval)(auxilary, left);
            ^            ^
此外,您几乎肯定不应该在这里使用
new
;您可以使用自动存储修复内存泄漏:

MyClass obj(-1);
leftvalue = (obj.*fEval)(auxiliary, left);

正如错误消息所说,您需要括号。这是因为函数调用的优先级高于
->*
运算符:

leftvalue = (pObj->*fEval)(auxilary, left);
            ^            ^
此外,您几乎肯定不应该在这里使用
new
;您可以使用自动存储修复内存泄漏:

MyClass obj(-1);
leftvalue = (obj.*fEval)(auxiliary, left);

这只是一个优先事项:
与其做
pObj->*fEval(aux,左)
,不如做
(pObj->*fEval)(aux,左)

这只是一个优先事项:
与其做
pObj->*fEval(aux,左)
,不如做
(pObj->*fEval)(aux,左)

非常感谢!老实说,我用了相当长的时间重写和调试这些函数(天)。当我一开始应该问这个问题时,因为这基本上是我处理这些函数的第一个方法-非常感谢!老实说,我用了相当长的时间重写和调试这些函数(天)。当我一开始应该问这个问题,因为这基本上是我对这些函数的第一种方法时--,在
Bisection
的定义中,参数
fEval
被声明为具有
MyClass
类型。这是不正确的。它应该是
MyClassFn
,正如在
Bisection
的声明中一样。在
Bisection
的定义中,参数
fEval
被声明为具有
MyClass
类型。这是不正确的。它应该是
MyClassFn
,就像在
对分声明中一样。