我正在使用gsl來集成一個函數。該函數構建在一個lambda函數中,該函數具有double和void *作爲輸入,並且輸出double。 現在,如果我使用沒有任何變量捕獲的lambda表達式,一切正常。但是如果我進行可變捕獲,它就不再工作了。lambda函數與gsl的數值積分
任何人都可以解釋我爲什麼這樣嗎?
這裏有兩個代碼片段是我做了解釋我的問題:
這一個正常工作:
int main(int argc, char **argv)
{
double beg = 0;
double end = 10;
auto f = [] (double x, void * p) {return 2.0;};
gsl_integration_workspace * w = gsl_integration_workspace_alloc (GSL_INTEGRATION_WORKSPACE_SIZE);
double result;
double error;
gsl_function F;
F.function = f;
F.params = NULL;
gsl_integration_qags (&F, beg, end, 0, GSL_INTEGRATION_RELATIVE_PRECISION, GSL_INTEGRATION_WORKSPACE_SIZE, w, &result, &error);
cout<<result<<endl;
}
雖然這一個
int main(int argc, char **argv)
{
double beg = 0;
double end = 10;
double p = 2.0;
auto f = [&] (double x, void * p) {return p;};
gsl_integration_workspace * w = gsl_integration_workspace_alloc (GSL_INTEGRATION_WORKSPACE_SIZE);
double result;
double error;
gsl_function F;
F.function = f;
F.params = NULL;
gsl_integration_qags (&F, beg, end, 0, GSL_INTEGRATION_RELATIVE_PRECISION, GSL_INTEGRATION_WORKSPACE_SIZE, w, &result, &error);
cout<<result<<endl;
}
上線
產量F.function = f;
出現以下錯誤:
Assigning to 'double (*)(double, void *)' from incompatible type '<lambda at /[omissis]/main.cpp>'
這正是我一直在尋找的! – 2014-10-30 07:51:41
如果你喜歡,你可以給其他答案:) – 2014-10-30 15:52:34
哪裏是'std :: function'? – Walter 2015-09-27 17:29:17