Тип метода класса
Я пишу код с использованием библиотеки числовых рецептов, и я хотел бы свести к минимуму функцию, которая на самом деле является методом класса. У меня есть этот тип кода:
class cl{
Doub instance(VecDoub_I &x)
{
return x[0]*x[0] + x[1]*x[1];
};
};
И я хочу минимизировать эту функцию с помощью метода Пауэлла, в следующем коде
// 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 ответ
Поскольку cl::instance
это метод экземпляра (т.е. не статический метод), он требует this
указатель. Поэтому вы не можете захватить указатель на него в обычном указателе функции. Кроме того, чтобы получить адрес функции, вы должны использовать &
оператор.
Я не знаком с библиотекой, которую вы используете, но я думаю, что изменение функции на static
(или сделать его бесплатной функцией) и добавить &
должно помочь
Powell<Doub (VecDoub_I &)> powell(&cl::instance);