我有这个抽象基类 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(){}
我也有这个类 ODEEuler ,它继承自 ODESolver
//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.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 预测函数中使用的所有类型是否与其他地方相同。我想这可能是我做错了一些概念性的事情。因为“预测”是抽象的,所以我不能实例化到底是什么意思?
提前感谢您的支持!