0

私はC++を初めて使用しますが、ヘッダーが正しく機能しない理由を理解できません。メインファイルの関数を含めるとfitzhough()、すべてが完全に機能します。ただし、別のファイルとして追加しようとすると、次のエラーが発生します。

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) ===|

私のコードは以下の通りです。どんな助けでも大歓迎です。

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(別のファイル)

#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;
}
4

2 に答える 2

1

fitzhough.o(fitzhough.cppの出力)にリンクしていないようです。プロジェクトにfitzhough.cppを挿入しましたか?

ちなみに、FitzHugh-Nagumoを実装している場合、彼の名前のスペルはFitzHugh:pです。

于 2013-01-11T02:27:04.383 に答える
0

ビルド システムがビルドされていないか、リンク段階でfitzhough.cpp追加されていないようです。fitzhough.o

fitzhough.cpp追加していない場合は、コード ブロック プロジェクト (または同等のもの) に追加する必要があります。

于 2013-01-11T02:22:23.480 に答える