2013-11-16 4 views
1

мне нужно использовать функцию интерполяции GNU-GSL, который выглядит следующим образом:Использование членов класса

double gsl_interp_eval (const gsl_interp * interp, const double xa[], const double ya[], double x, gsl_interp_accel * acc) 

Но ха [] и уа [] массивы, которые мне нужны, элементы Ax и Ayvalue описывается этими объектами:

class c_ys { 
    double value; 
}; 

struct s_points { 
    double x; 
    c_ys y; 
}; 

class c_curves { 
    vector<s_points> A; 
}; 

Как я могу использовать эти элементы в качестве второго и третьего аргументов в функции gsl_interp_eval?

ответ

2

Вы не сможете сделать это без копирования, потому что смещения в памяти между членами double неверны.

Вот как вы можете это сделать:

double *x = new double[A.size()]; 
double *y = new double[A.size()]; 
for (int i = 0 ; i != A.size() ; i++) { 
    x[i] = A[i].x; 
    y[i] = A[i].y.value; 
} 
gsl_interp_eval(...); // call your function 
delete[] x; 
delete[] y; 
Смежные вопросы