我有两个基类,valuationFunction和SimulationEngine,我相信我在这两个基类中创建了一个循环引用,我不知道如何整理。最初我只让SimulationEngine包含ValuationFunction,但后来我创建了enum的 RiskFactor
在SimulationEngine中,我需要ValuationFunction来识别,这就是我认为我的麻烦所在。仅仅是看一下,这显然是错误的,因为这两个头文件是互相包含的,但我如何让ValuationFunction(以及它的所有继承类)能够接受一个类型为 RiskFactor
作为输入?
SimulationEngine :
#pragma once
#define SIMULATION_ENGINE_H
#include "valuationFunction.h"
#include "Wrapper.h"
class SimulationEngine
{
public:
enum RiskFactor { interest_rate, equity, volatility, FX_rate };
SimulationEngine(double horizon, Wrapper<valuationFunction> theFunction_, RiskFactor simulatedRiskFactor);
virtual void DoOnePath(double vol, double normvariate) = 0;
virtual SimulationEngine* clone() const = 0;
const virtual double GetHorizon();
Wrapper<valuationFunction>& GetFunction();
RiskFactor simulatedRiskFactor;
protected:
double horizon;
Wrapper<valuationFunction> theFunction;
};
ValuationFunction:
#pragma once
#define VALUATION_FUNCTION_H
#include "SimulationEngine.h"
class valuationFunction
{
public:
valuationFunction(double TTM);
virtual void ValueInstrument() = 0;
virtual double GetValue() const;
virtual void RiskFactorAdd(double increment, SimulationEngine::RiskFactor simulatedRiskFactor) = 0;
virtual void RiskFactorMultiply(double factor, SimulationEngine::RiskFactor simulatedRiskFactor) = 0;
virtual void UpdateTTM(double timeStep);
virtual valuationFunction* clone() const = 0;
virtual ~valuationFunction() {}
private:
protected:
double f;
double TTM;
};
创建RiskFactor.h。 把枚举贴在那里。 在两个头中都包含它。