вызов функции c в переполнении стека

Я пытаюсь создать класс-обертку, чтобы обернуть функцию c lmdif1 в библиотеке cminpack

class CSolver
{
public:
void solve()
{
...
using namespace std::placeholders;
auto f = std::bind(&CSolver::fcn, this, _1, _2, _3, _4, _5, _6);
int32_t iRet = lmdif1(f, 0, m_iEqualCount, m_iUnknownVariableCount, x, fvec, tol, iwa, wa, lwa);
}
private:
int32_t fcn(void* p, int32_t m, int32_t n, const double* x, double* fvec,int iFlag)
{
....
}
};

Ошибка компиляции:

error: cannot convert ‘std::_Bind<std::_Mem_fn<int (CSolver::*)(void*, int, int, const double*, double*, int)>(CSolver*, std::_Placeholder<1>, std::_Placeholder<2>, std::_Placeholder<3>, std::_Placeholder<4>, std::_Placeholder<5>, std::_Placeholder<6>)>’ to ‘cminpack_func_mn {aka int (*)(void*, int, int, const double*, double*, int)}’ for argument ‘1’ to ‘int lmdif1(cminpack_func_mn, void*, int, int, double*, double*, double, int*, double*, int)’
int32_t iRet = lmdif1(f, 0, m_iEqualCount, m_iUnknownVariableCount, x, fvec, tol, iwa, wa, lwa);

Как я могу решить это?

РЕДАКТИРОВАТЬ: Таким образом, я буду использовать глобальную функцию. Спасибо вам всем.

2

Решение

Вы не можете взять указатель на функцию-член. Это должна быть функция класса. Функции класса объявлены с ключевым словом static в C ++. Так что все, что вам нужно сделать, это изменить прототип fcn на:

static int32_t fcn (void *p, int32_t m, int32_t n, const double *x,
double *fvec, int iFlag)

Конечно, вы не сможете получить доступ к любым нестатическим переменным-членам из fcn.

Надеюсь это поможет!

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector