Ошибка LNK2019 и фатальная ошибка LNK1120
Я столкнулся с проблемой при компиляции моего проекта. Когда я установил эту строку:
boost:: shared_ptr mySwap;
У меня нет проблем, но когда я установил это:
boost:: shared_ptr mySwap (новый OvernightVsLiborBasisSwap(OvernightVsLiborBasisSwap::PayerOvernight, 1.0, scheduleOis, indexOis, dayCountOis, 1.0, scheduleLibor, indexLibor, dayCountLibor));
У меня есть следующее сообщение об ошибке
excelFunctions.obj: ошибка LNK2019: неразрешенный внешний символ "public: __thiscall ModLibNY::OvernightVsLiborBasisSwap::OvernightVsLiborBasisSwap(enum ModLibNY::OvernightVsLiborBasisSwap::Type, двойной, общий и повышенный класс, класс-константный класс_Lub:: LIBKB:: QuantLib::DayCounter const &,double, класс QuantLib:: Расписание const &, класс boost::shared_ptr const &, класс QuantLib::DayCounter const &,double,double,bool,bool, повышение класса:: необязательно, повышение класса:: необязательно)" (??0OvernightVsLiborBasisSwap@ModLibNY@@QAE@W4Type@01@NABVSchedule@QuantLib@@ABV?$shared_ptr@VOvernightIndex@QuantLib@@@boost@@ABVDayCounter@4@N1ABrInbor@VIB_InLibIn? @@6@3NN_N5V?$ Необязательно @W4BusinessDayConvention@QuantLib@@@6@6@Z), на которую ссылается функция "класс xlw::NCMatrix __cdecl getOisLiborSwapCurve(класс xlw::CellMatrix const &, класс xlw::CellMatrix const &, xlw::CellMatrix const &, класс xlw::CellMatrix const &,double const &)" (?getOisLiborSwapCurve@@YA?AVNCMatrix@xlw@@ABVCellMatrix@2@000ABN@Z) 3>.\Debug\ExplainPnL.xll: фатальная ошибка LNK1120: 1 неразрешенный внешний код
Объект OvernightVsLiborBasisSwap является частью моей собственной статической библиотеки ModLibNY, которая входит в комплект. Первые строки моего кода содержат:
#include <ql/quantlib.hpp>
#include <ml/modlibny.hpp>
#include <ml/swaps/overnightvsliborbasisswap.hpp>
using namespace std;
using namespace xlw;
using namespace QuantLib;
using namespace ModLibNY;
Что очень странно, так это то, что я вижу ошибку при использовании конструктора. Для информации он объявлен в файле.hpp как
#ifndef overnight_vs_libor_basis_swap_hpp
#define overnight_vs_libor_basis_swap_hpp
#include <ql/quantlib.hpp>
using namespace std;
using namespace QuantLib;
namespace ModLibNY {
class InterestRateIndex;
class OvernightVsLiborBasisSwap : public Swap {
public:
enum Type { ReceiverOvernight = -1, PayerOvernight = 1 };
class arguments;
class results;
class engine;
OvernightVsLiborBasisSwap(
const OvernightVsLiborBasisSwap::Type type,
const Real nominal1,
const Schedule &schedule1,
const boost::shared_ptr<OvernightIndex> &index1,
const DayCounter &dayCount1,
const Real nominal2,
const Schedule &schedule2,
const boost::shared_ptr<IborIndex> &index2,
const DayCounter &dayCount2,
const Real spread1 = 0.0,
const Real spread2 = 0.0,
const bool intermediateCapitalExchange = false,
const bool finalCapitalExchange = false,
boost::optional<BusinessDayConvention> paymentConvention1 =
boost::none,
boost::optional<BusinessDayConvention> paymentConvention2 =
boost::none);
и определено в.cpp файле:
#include "StdAfx.h"
#include "overnightvsliborbasisswap.hpp"
#include <ql/quantlib.hpp>
using namespace QuantLib;
пространство имен ModLibNY {
OvernightVsLiborBasisSwap::OvernightVsLiborBasisSwap(
const OvernightVsLiborBasisSwap::Type type,
const Real nominal1,
const Schedule &schedule1,
const boost::shared_ptr<OvernightIndex> &index1,
const DayCounter &dayCount1,
const Real nominal2,
const Schedule &schedule2,
const boost::shared_ptr<IborIndex> &index2,
const DayCounter &dayCount2,
const Real spread1,
const Real spread2,
const bool intermediateCapitalExchange,
const bool finalCapitalExchange,
boost::optional<BusinessDayConvention> paymentConvention1,
boost::optional<BusinessDayConvention> paymentConvention2)
: Swap(2),
type_(type),
nominal1_(std::vector<Real>(schedule1.size() - 1, nominal1)),
nominal2_(std::vector<Real>(schedule2.size() - 1, nominal2)),
schedule1_(schedule1),
schedule2_(schedule2),
index1_(index1),
index2_(index2),
dayCount1_(dayCount1),
dayCount2_(dayCount2),
intermediateCapitalExchange_(intermediateCapitalExchange),
finalCapitalExchange_(finalCapitalExchange)
{
init(paymentConvention1, paymentConvention2);
}
... Если кто-то имеет представление о происхождении проблемы, пожалуйста, дайте мне знать!
Спасибо