Reputation: 17
I am new to c++ and I can't figure out why my headers are not working correctly. If I include the function fitzhough()
from the main file, everything works perfectly. However, if I try to add it as a separate file, it gives the error:
obj\Debug\main.o||In function `main':|
C:\Users\Dan\Documents\C code\RK4\main.cpp|83|undefined reference to `fitzhough(double, Eigen::Matrix<double, 2, 1, 0, 2, 1>, double, double*)'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|
My code is below. Any help would be greatly appreciated.
main.cpp
# include < iostream >
# include < fstream >
# include < Eigen/Dense >
# include "gnuplot.h"
# include "addfitzhough.h"
using namespace std;
using namespace Eigen;
Vector2d RK4(Vector2d (*f)(double, Vector2d, double, double*), double t, Vector2d z, double h, double u, double *Iion, int d) {
VectorXd Y1(d), Y2(d), Y3(d), Y4(d), Y1buf(d), Y2buf(d), Y3buf(d);
Y1 = z;
Y1buf = (*f)(t,Y1,u, Iion);
Y2 = z + 0.5*h*Y1buf;
Y2buf = (*f)(t+.5*h,Y2,u, Iion);
Y3 = z + 0.5*h*Y2buf;
Y3buf = (*f)(t+.5*h,Y3,u, Iion);
Y4 = z + h*Y3buf;
Vector2d yn = z + (h/6.0)*(Y1buf + 2.0*Y2buf + 2.0*Y3buf + (*f)(t+h,Y4,u, Iion));
return yn;
}
int main() {
//int mydims = 2;
double u = 0;
double *Iion;
double h = .5;
double y1ans[800];
double y2ans[800];
double tans[800];
Vector2d ycurr;
Vector2d Ynot, yplus;
Ynot << .2,
.1;
y1ans[0] = Ynot(0);
y2ans[0] = Ynot(1);
tans[0] = 0.0;
for(int i = 1;i<800;i++){
tans[i] = tans[i-1] + h;
ycurr << y1ans[i-1],
y2ans[i-1];
yplus = RK4(fitzhough,tans[i],ycurr,h,u,Iion,2);
y1ans[i] = yplus(0);
y2ans[i] = yplus(1);
}
}
addfitzhough.h (in separate file)
#ifndef FF
#define FF
using namespace Eigen;
Vector2d fitzhough(double t, Vector2d Y, double u, double * Iion);
#endif // FITZ
fitzhough.cpp
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
Vector2d fitzhough(double t, Vector2d Y, double u, double * Iion) {
Vector2d dy;
double v = Y(0);
double w = Y(1);
double a = .13;
double b = .013;
double c1 = .26;
double c2 = .1;
double d = 1.0;
dy(0) = c1*v*(v-a)*(1-v)-c2*w*v + u;
dy(1) = b*(v-d*w);
*Iion = dy(0)-u;
return dy;
}
Upvotes: 0
Views: 329
Reputation: 3466
It looks like you are not linking to fitzhough.o (the output of fitzhough.cpp). Did you insert fitzhough.cpp into the project?
By the way, if you're implementing FitzHugh-Nagumo, his name is spelled FitzHugh :p
Upvotes: 1
Reputation: 31952
It looks like your build system is either not building fitzhough.cpp
or is not adding fitzhough.o
in the link stage.
You should add fitzhough.cpp
to the code blocks project (or equivalent) if you havent.
Upvotes: 0