Проблема, с которой я столкнулся, заключается в следующем.Я использую GSL для выполнения числовой интеграции функции внутри более крупной программы на C ++.Код, который я использую для численной интеграции, выглядит следующим образом:
struct psi_params
{
double d_s;
double yav_s;
double sig_s;
double dE_s;
};
/* Function to define the psi function appearing in the first-passage time formulas. Note that this function holds only
* for the special potential made by an exponential plus a sigmoid
*/
double psi(double y, void * p)
{
auto * params = (struct psi_params *) p;
double d = (params->d_s);
double yav = (params->yav_s);
double sig = (params->sig_s);
double dE = (params->dE_s);
return pow(M_E, d / pow(M_E, pow(y - yav, 2) / (2. * pow(sig, 2))) - (dE * (1 + (y - yav) / (sig * sqrt(1 + pow(y - yav, 2) / pow(sig, 2))))) / 2.);
}
/* Function to numerically evaluate the integrals of the psi function with the gsl.Note that this function holds only
* for the special potential made by an exponential plus a sigmoid
*/
double Integral_I(double d,
double yav,
double sig,
double dE,
double a,
double b)
{
struct psi_params parameters = { d, yav, sig, dE };
gsl_function Psi;
Psi.function = ψ
Psi.params = ¶meters;
double result, error;
gsl_integration_workspace *w = gsl_integration_workspace_alloc(1000);
gsl_integration_qags(&Psi, a, b, 0, 1e-7, 1000, w, &result, &error);
return result;
}
Проблема в том, что моя среда IDE (clion) сообщает мне, что переменная ¶meters выходит за пределы локальной области видимости в строке
Psi.params = ¶meters;
На самом деле я не понимаю, почему это происходит по следующим причинам:
1) C ++ никогда не был моей сильной стороной, и в последний раз я использовал его 7 лет назад.
2)MWE, который я дал, является небольшой модификацией примера, предоставленного справочным руководством GLS ( здесь ) в тандеме с определением функции GSL_ с параметрами ( здесь ).Кроме того, сотрудники GSL здесь предоставляют MWE, аналогичное приведенному выше, для выполнения численного интегрирования функций с параметрами.Я ожидал бы, что подобные примеры будут нечестными.
3) Я нашел старую ветку ( здесь ), в которой обсуждается выход из области видимости переменной в clion, но я не уверенесли они связаны с моей проблемой (см. пункт 1).Вдобавок ко всему, не приводится минимального рабочего примера, поэтому я не понимаю, как действовать.
Любая помощь в решении этой проблемы приветствуется.