проблема создания шаблона со сложными типами данных

У меня есть тип параметров как

typedef double DP;
typedef const NRVec<DP> Vec_I_DP; //NRVec is a parametrized template class.
typedef NRVec<DP> Vec_DP, Vec_O_DP, Vec_IO_DP;

xa -> Vec_I_DP(30)
ya -> Vec_I_DP(30)
yp1 -> DP(30)
ypn -> DP(30)
y2 -> Vec_O_DP(30)

Моя функция вызова

NR::spline(xa,          ya,          yp1,          ypn,         y2);

И объявление функции

void spline(Vec_I_DP &x, Vec_I_DP &y, const DP yp1, const DP ypn,Vec_O_DP &y2);

Может кто-нибудь сказать мне, почему я получаю следующую ошибку.

1>Hiwi.obj : error LNK2019: unresolved external symbol "void __cdecl NR::spline(class NRVec<double> const &,class NRVec<double> const &,double,double,class NRVec<double> &)" (?spline@NR@@YAXABV?$NRVec@N@@0NNAAV2@@Z) referenced in function "void __cdecl smooth_Line(double *,int *,int,int,double *,double *,int,int)" (?smooth_disp_Line@@YAXPANPAHHH00HH@Z)

0

Решение

Кажется, вы используете NR2. Самая новая версия — NR3, которая определяет сплайн в классе Spline_interp, Вы должны использовать NR3. В связи с этим я покажу вам пример использования вышеупомянутого класса. Допустим, у вас есть пять значений для sin(x) и вы можете интерполировать эти значения и получить интерполированные значения, скажем, sin(x=.25), В этом примере мы знаем истинное значение, поэтому мы можем сравнить результат с интерполированным значением. В следующем коде я получил интерполированное значение плюс ошибку.

#include <iostream>
#include <iomanip>
#include "nr3.h"#include "interp_1d.h"
int main() {
VecDoub x(5), y(5);

//x = 0:0.3:1
//y = sin(x)

x[0] = 0.0;
x[1] = 0.3;
x[2] = 0.6;
x[3] = 0.9;

y[0] = 0.0;
y[1] = 0.2955;
y[2] = 0.5646;
y[3] = 0.7833;

/**************************************************
3.3 Cubic Spline Interpolation
page(120)
***************************************************/

Spline_interp myfunc3(x,y);
std::cout << "Cubic Spline Interpolation: " << std::endl;
std::cout << "interp value: " << myfunc3.interp(.25)  << "\n"<< "  true value: " << sin(0.25)            << "\n"<< "       error: " << ( ( sin(0.25) - myfunc3.interp(.25) )/sin(0.25) )*100.0  << "%" << std::endl;std::cout << std::setw(25) << std::cout.fill('=') << std::endl;return 0;
}

Для компиляции в Windows из командной строки,

cl /EHsc main.cpp /Fetest.exe /I path\to\NR\code

Результат

Cubic Spline Interpolation:
interp value: 0.247187
true value: 0.247404
error: 0.0876794%
========================

Ошибка очень маленькая.

0

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

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

По вопросам рекламы [email protected]