«Значение выходит за пределы локальной области» при передаче параметров в GSL_function - PullRequest
0 голосов
/ 26 февраля 2019

Проблема, с которой я столкнулся, заключается в следующем.Я использую 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 = &parameters;
    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 = &parameters;

На самом деле я не понимаю, почему это происходит по следующим причинам:

1) C ++ никогда не был моей сильной стороной, и в последний раз я использовал его 7 лет назад.

2)MWE, который я дал, является небольшой модификацией примера, предоставленного справочным руководством GLS ( здесь ) в тандеме с определением функции GSL_ с параметрами ( здесь ).Кроме того, сотрудники GSL здесь предоставляют MWE, аналогичное приведенному выше, для выполнения численного интегрирования функций с параметрами.Я ожидал бы, что подобные примеры будут нечестными.

3) Я нашел старую ветку ( здесь ), в которой обсуждается выход из области видимости переменной в clion, но я не уверенесли они связаны с моей проблемой (см. пункт 1).Вдобавок ко всему, не приводится минимального рабочего примера, поэтому я не понимаю, как действовать.

Любая помощь в решении этой проблемы приветствуется.

...