この抽象基本クラス ODESolver があります。
//ODESolver.h
#ifndef ODESolver_H
#define ODESolver_H
#include "doublependulum.h"
class ODESolver
{
public:
ODESolver( DoublePendulum&); //constr
virtual ~ODESolver(); //destr
virtual void predict (const double &)=0; //virtual
protected:
DoublePendulum DoublePend;
};
#endif
実装あり:
//ODESolver.cpp
#include "ODESolver.h"
//constructor
ODESolver::ODESolver( DoublePendulum & param)
:DoublePend(param)
{}
//destructor
ODESolver::~ODESolver(){}
ODESolverから継承するこのクラスODEEulerもあります
//ODEEuler.h
#ifndef ODEEuler_H
#define ODEEuler_H
#include "ODESolver.h"
class ODEEuler : public ODESolver
{
public:
ODEEuler(DoublePendulum &);
virtual ~ODEEuler();
virtual void Predict(const double &);
};
#endif
実装あり
//ODEEuler.cpp
#include "ODEEuler.h"
#include <iostream>
using namespace::std;
ODEEuler::ODEEuler (DoublePendulum ¶m)
:ODESolver(param)
{}
//destructor
ODEEuler::~ODEEuler(){}
void ODEEuler::Predict(const double &dt=0.01)
{
DoublePend=DoublePend+DoublePend.Derivative()*dt;
cout << DoublePend.getUp().getTheta() << endl; \\ I want to print getTheta on the screen form my getUp Pendulum from my Doublepend
}
ODEEuler をテストしたいので、Main ファイルにオブジェクトを作成しました。
//Main.cpp
#include "pendulum.h"
#include "doublependulum.h"
#include "ODEEuler.h"
#include "ODESolver.h"
#include <iostream>
using namespace::std;
int main()
{
Pendulum MyPendulum(1.5,1.5,1.5,1.5);
DoublePendulum MyDoublePendulum(MyPendulum,MyPendulum,9.81);
ODEEuler myODEEuler(MyDoublePendulum);
return 0;
}
このエラーが発生し続けます:
1>....\main.cpp(24): エラー C2259: 'ODEEuler': 抽象クラスをインスタンス化できません 1> 次のメンバーのため: 1> 'void ODESolver::predict(const double &)': 抽象クラス 1 >
.....\odesolver.h(11) : 'ODESolver::predict' の宣言を参照
仮想 void 予測関数で使用したすべての型が他の場所と同じかどうかを確認しました。それはおそらく私が間違っている概念的なものだと思います。「予測」は抽象的であるため、インスタンス化できないとはどういう意味ですか?
ご支援いただきありがとうございます。