类方法类型

时间:2015-03-23 08:29:32

标签: c++ numerical-recipes

我正在使用数字配方库编写代码,我想最小化一个实际上是类方法的函数。我有这种类型的代码:

class cl{
  Doub instance(VecDoub_I &x)
  {
    return x[0]*x[0] + x[1]*x[1];
  };
};

我想在下面的代码中使用Powell方法最小化此函数

// enter code here
int main(void)
{
  cl test;
  Powell<Doub (VecDoub_I &)> powell(test.instance);
}

但是当我编译时,我得到以下错误:

main.cpp:241:22: error: invalid use of member function (did you forget the ‘()’ ?)
main.cpp:242:54: error: no matching function for call to ‘Powell<double(const NRvector<double>&)>::Powell(<unresolved overloaded function type>)’

有人已经遇到过这个问题吗? 提前致谢

1 个答案:

答案 0 :(得分:0)

由于cl::instance实例方法(即不是静态方法),因此需要this指针。因此,您无法在regular function pointer中捕获指向它的指针。另外,为了获取函数的地址,您应该使用&运算符。

我不熟悉您正在使用的库,但我认为将函数更改为static(或使其成为自由函数)并添加&应该会有所帮助

Powell<Doub (VecDoub_I &)> powell(&cl::instance);