0
は、私は次のようにクラス階層を設定しようとしています:テンプレートと継承
template< class TProcess>
class Path
{
protected:
TProcess &process;
double Xt;
public:
Path(TProcess &process, double X0) : process(process), Xt(X0) {}
virtual ~Path(){}
virtual double dX(double dt, const std::vector<double> &dW) = 0;
};
template< class TProcess>
class Process
{
protected:
double X0;
public:
Process(double X0) : X0(X0) {}
virtual ~Process(){}
virtual boost::shared_ptr<Path<TProcess> > NewPath() =0;
};
をその後私はそれが動作するように、それは不可能サブクラスを宣言しました。私が試した:
class GeometricBrownianMotion;
class GBMPath: public Path<GeometricBrownianMotion>
{
double dX(double dt, const std::vector<double> &dW)
{
Xt = Xt*exp(process.mu*dt - 0.5*dt + process.sigma*dW);
return Xt;
}
};
class GeometricBrownianMotion: public Process<GeometricBrownianMotion>
{
double mu;
const std::vector<double> σ
double sigma2;
public:
GeometricBrownianMotion(double X0, double mu, const std::vector<double> &sigma): Process(X0), mu(mu), sigma(sigma), sigma2(sigma*sigma)
{}
virtual boost::shared_ptr<Path<GeometricBrownianMotion> > NewPath()
{
return boost::shared_ptr<Path<GeometricBrownianMotion> >(new GBMPath(*this, X0));
}
};
が、私は次のエラーを取得:
process.h:58: error: forward declaration of ‘struct GeometricBrownianMotion’
process.h:63: error: invalid use of incomplete type ‘struct GeometricBrownianMotion’
任意のアイデアはどのようにそれを動作させるためには?
'GeometricBrownianMotion'と' GBMPath'からインラインメソッド定義を削除しますか? – Grzenio