C++ 无法实例化抽象类,因为成员是抽象的

C++ 无法实例化抽象类,因为成员是抽象的,c++,C++,我有一个抽象基类ODESolver: //ODESolver.h #ifndef ODESolver_H #define ODESolver_H #include "doublependulum.h" class ODESolver { public: ODESolver( DoublePendulum&); //constr virtual ~ODESolver(); //destr virtual void

我有一个抽象基类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(){}
我还有一个Odeuler wich从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 &param) 
         :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
}
//odeuler.cpp
#包括“ODEEuler.h”
#包括
使用namespace::std;
ODEEuler::ODEEuler(双摆和参数)
:ODESolver(参数)
{}
//析构函数
ODEEuler::~ODEEuler(){}
预测(常数双&dt=0.01)
{
DoublePend=DoublePend+DoublePend.导数()*dt;
由于以下成员而无法执行:1>无效
ODESolver::predict(const double&)':是抽象的1>
..…\odesolver.h(11):参见“odesolver::predict”的声明

我检查了我在虚拟void predict函数中使用的所有类型是否与其他函数相同。我想这可能是我在概念上犯了错误。因为“predict”是抽象的,所以我不能实例化到底意味着什么


提前感谢您的支持!

您的派生类需要实现纯虚拟函数才能实例化

virtual void predict (const double &)=0;
             ^

void ODEEuler::Predict(const double &dt=0.01)
               ^

请注意大写的
p
使派生类中的方法成为不同的方法,并且您最终从未定义基类纯虚方法。

您的派生类需要实现纯虚函数才能实例化

virtual void predict (const double &)=0;
             ^

void ODEEuler::Predict(const double &dt=0.01)
               ^

请注意大写字母
p
使派生类中的方法成为不同的方法,并且您最终永远不会定义基类纯虚拟方法。

对于C++11,可以使用override关键字使编译器在许多情况下检测到此类情况。@Plasmah-是的,C++11可以做到这一点,但您需要帮助OP找出错误首先。哦,天哪!真愚蠢。我现在几乎要自杀了。非常感谢!有了C++11,人们可以使用override关键字让编译器在很多情况下检测到这样的事情。@Plasmah-是的,C++11可以做到这一点,但你需要先帮助OP找出错误。哦,天哪!真愚蠢。我现在几乎要自杀了。。是的哦,非常感谢!