在C++中解决循环引用问题时遇到困难

问题描述 投票:0回答:1

我有两个基类,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;
};
c++ circular-dependency undeclared-identifier
1个回答
4
投票

创建RiskFactor.h。 把枚举贴在那里。 在两个头中都包含它。

© www.soinside.com 2019 - 2024. All rights reserved.