मैं सी ++ में क्वांटलिब 1.19 के साथ काम कर रहा हूं। जब मैं एक नया 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 में, इसे टर्मस्ट्रक्चर हैंडल पैरामीटर में हटा दिया गया है:

    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>());

मैं सी ++ के लिए नया हूँ। तो शायद यह वास्तव में बुनियादी सी ++ का सवाल है। लेकिन क्या आप कृपया मुझे यह समझने में मदद कर सकते हैं कि मुझे 1.19 में यह त्रुटि क्यों हो रही है? और अब इसे 1.22 में क्यों बदला गया है?

पहले से बहुत सराहना की।

0
zerra123 21 अप्रैल 2021, 11:57

1 उत्तर

सबसे बढ़िया उत्तर

कंस्ट्रक्टर पैरामीटर के लिए विशेष रूप से आपको एक Handle<YieldTermStructure> पास करने की आवश्यकता होती है।

हालाँकि आप एक Handle<TermStructure> पास कर रहे हैं जो एक असंगत प्रकार है और इसीलिए आपको त्रुटि मिलती है।

मैं पुस्तकालय नहीं जानता, लेकिन मुझे उम्मीद है कि आप इसे घोषित करके सही कर सकते हैं

Handle<YieldTermStructure> crv_handle(crv);

1.22 में हुआ परिवर्तन असंबंधित है। उस पैरामीटर के लिए पैरामीटर पास करने का तरीका बाय-कॉन्स्टेंट-रेफ़रेंस से बाय-वैल्यू में बदल गया है। आपको अभी भी वही त्रुटि मिलेगी।

1
acraig5075 21 अप्रैल 2021, 12:24
आह। मैं लज्जित महसूस कर रहा हूं। जाहिर है एक नए सी ++ प्रोग्रामर से एक लापरवाह गलती। बहुत - बहुत धन्यवाद!
 – 
zerra123
21 अप्रैल 2021, 12:30