我有以下类为我评论的行产生此错误:描述无效的参数'候选者是: Eigen :: Matrix Forward_Euler(double()(double),double()(double),double(*)(double))'我在尝试搜索解决方案时感到困惑。< / p>
Forward Euler的签名是:
Eigen::MatrixXd Forward_Euler(double (*f)(double), double (*gleft)(double), double (*gright)(double))
我的班级是:
class C
{
protected:
A x;
B y;
double a;
double b;
Eigen::MatrixXd u;
public:
double f(double x)
{
return a;
}
double gleft(double tau)
{
return b
}
double gright(double tau)
{
return a*b;
}
FD_Euro_Put(): x(), y(), a(0), b(0){}
FD_Euro_Put(char y1, double y2, double y3, double y4, double x2,
double x3, double x4, double x5, double x6, double x7):
x(x1, x2, x3, x4, x5, x6, x7)
{
double Xleft = x1*x2;
double Xright = x1*x3;
double Tauf = x1*x1;
double NN = floor((x1/x2);
a = x1*x2 - 0.5;
b = x1*x2 + 0.5;
pde = HeatPDE(y1, NN, Xleft, Xright, Tauf, Alpha); //begin problem area
u.resize(pde.N+1, pde.M+1);
if(fdtype == 'f')
u = pde.Forward_Euler(&f, &gleft, &gright);
else if(fdtype == 'b')
u = pde.Backward_Euler(&f, &gleft, &gright);
else if(fdtype == 'c')
u = pde.Crank_Nicolson(&f, &gleft, &gright); //end problem area
else
cout << "Incorrect choice for finite difference type!" << endl;
}
答案 0 :(得分:3)
成员函数指针和函数指针不是一回事。成员函数指针的工作要困难得多,需要处理虚函数和this
指针等事情。
但是看看你班上的功能吧!它们不是真正的对象函数,因为它们不使用对象。您可以将它们移出课堂,也可以使它们成为课程的static
个功能。如果您执行其中任何一项操作,可以将它们用作函数指针。
我认为你必须使用类模板和静态函数。您可以将参数作为模板参数提供。