QuantLib Error: “QuantLib::Handle<QuantLib::TermStructure>” cannot convert to “const QuantLib::Handle<QuantLib::YieldTermStructure> &”

QuantLib Error: “QuantLib::Handle<QuantLib::TermStructure>” cannot convert to “const QuantLib::Handle<QuantLib::YieldTermStructure> &”

我正在使用 C++ 中的 QuantLib 1.19。当我尝试传递一个 TermStructure 句柄来创建一个新的 IborIndex 时,我在主题中得到了错误。我的代码如下所示:

#include <iostream>
#include <ql/quantlib.hpp>
#include <vector>

int main() {
    using namespace std;
    using namespace QuantLib;

    Date today(21, Apr, 2021);
    std::string familyName("TestTest");
    Period tenor(1, Years);
    Natural settlementDays(0);
    USDCurrency usd;
    Currency currency(usd);
    TARGET target;
    BusinessDayConvention convention(ModifiedFollowing);
    bool endOfMonth(true);
    Actual365Fixed dayCounter;

    ext::shared_ptr<YieldTermStructure> crv(new FlatForward(today, 0.03, dayCounter));
    Handle<TermStructure> crv_handle(crv);

    IborIndex crv_index(familyName, tenor, settlementDays, currency, target, convention, endOfMonth, dayCounter, crv_handle);
    
    return EXIT_SUCCESS;
}

我正在查看1.19中IborIndex的定义,是这样的:

    class IborIndex : public InterestRateIndex {
      public:
        IborIndex(const std::string& familyName,
                  const Period& tenor,
                  Natural settlementDays,
                  const Currency& currency,
                  const Calendar& fixingCalendar,
                  BusinessDayConvention convention,
                  bool endOfMonth,
                  const DayCounter& dayCounter,
                  const Handle<YieldTermStructure>& h =
                                    Handle<YieldTermStructure>());

但是在最新的1.22版本中,去掉了termstructure句柄参数中的const:

    class IborIndex : public InterestRateIndex {
      public:
        IborIndex(const std::string& familyName,
                  const Period& tenor,
                  Natural settlementDays,
                  const Currency& currency,
                  const Calendar& fixingCalendar,
                  BusinessDayConvention convention,
                  bool endOfMonth,
                  const DayCounter& dayCounter,
                  Handle<YieldTermStructure> h = Handle<YieldTermStructure>());

我是 C++ 新手。所以也许这真的是基本 C++ 的问题。但是你能帮我理解我在 1.19 中出现这个错误的原因吗?为什么它现在在 1.22 中发生了变化?

非常感谢。

构造函数参数特别要求你传递一个Handle<YieldTermStructure>.

然而,您传递的 Handle<TermStructure> 是不兼容的类型,这就是您收到错误的原因。

我不知道图书馆,但我希望你能通过声明来更正它

Handle<YieldTermStructure> crv_handle(crv);

1.22 中发生的更改无关。该参数的参数传递方法已从 by-constant-reference 更改为 by-value。你仍然会得到同样的错误。