2

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

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>)’

有没有人遇到过这个问题?提前致谢

4

1 回答 1

0

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

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

Powell<Doub (VecDoub_I &)> powell(&cl::instance);
于 2015-03-23T08:41:46.107 回答