1
我有這個抽象基類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): error C2259: 'ODEEuler' : cannot instantiate abstract class 1> due to following members: 1> 'void ODESolver::predict(const double &)' : is abstract 1>
.....\odesolver.h(11) : see declaration of 'ODESolver::predict'
我如果所有類型的檢查發現我用在我的虛擬無效預測函數中與其他地方相同。我想這可能是一些概念,我做錯了。究竟是什麼意思,我不能實例化,因爲'預測'是抽象的?
在此先感謝您的支持!
使用C++ 11,人們可以使用override關鍵字在很多情況下使編譯器檢測到這種情況。 – PlasmaHH
@ PlasmaHH - 是的C++ 11可以做到這一點,但你需要幫助OP找出錯誤。 – DumbCoder
天啊!多麼愚蠢。我非常接近自殺現在.. 非常感謝! – ComputerSaysNo