【问题标题】:Trouble coming up with a solution to a circular reference in C++在 C++ 中想出解决循环引用的问题
【发布时间】:2020-09-06 01:40:02
【问题描述】:

我有两个基类,valuationFunction 和 SimulationEngine,我相信我已经创建了一个循环引用,但我不确定如何整理。最初我只有 SimulationEngine 包含 ValuationFunction,但后来我在 SimulationEngine 中创建了枚举RiskFactor,我需要 ValuationFunction 来识别,这就是我认为我的麻烦所在。只看这显然是错误的,因为两个头文件管理器相互包含,但是我怎么才能让 ValuationFunction (以及它所有的继承类)能够将RiskFactor 类型的对象作为输入?

模拟引擎:

#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;
};

估值函数:

#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】:

    创建 RiskFactor.h。将枚举粘贴在那里。将其包含在两个标题中。

    【讨论】:

    • 听起来很简单,谢谢。我是把它“放在”某物的“里面”还是只写一行?
    • @oscar 我建议将您的代码放在您自己的命名空间中。使与其他库(std、C、其他)的互操作更容易一些。当然还有头卫(或pragma once)
    猜你喜欢
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多