gpt4 book ai didi

c++ - C++ 中的模板和继承

转载 作者:行者123 更新时间:2023-11-28 01:01:20 24 4
gpt4 key购买 nike

我正在尝试按如下方式设置类层次结构:

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> &sigma;
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 的定义,然后再将其用作模板参数。

编辑:即使差一点,至少在我的编译器上,删除所有内联方法定义就足以让它编译。<​​/p>

关于c++ - C++ 中的模板和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8554742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com