I am still learning C++, so reading all similar posts (on SO) about this problem did not give me clarity.
I want to create a method called getFixedLeg inside an object SwapFixedIborDefinition that will return AnnuityCouponFixedDefinition object.
While trying to solve the problem I found that in the Debug folder of the Project these objects where created:
main.obj
SwapFixedIborDefinition.obj
GeneratorSwapFixedIbor.obj
If I comment out the method and all the mentioning of the AnnuityCouponFixedDefinition class then everything works fine.
I have 2 questions:
- How to locate and resolve the error I have?
- Why do I have different errors when I launch my project (I work in VS2017) in Debug and Release modes?
In case of Debug I get:
    Error   LNK2019 unresolved external symbol "public: __thiscall AnnuityCouponFixedDefinition::AnnuityCouponFixedDefinition(double,class GeneratorSwapFixedIbor,double)" (??0AnnuityCouponFixedDefinition@@QAE@NVGeneratorSwapFixedIbor@@N@Z) referenced in function "public: class AnnuityCouponFixedDefinition __thiscall SwapFixedIborDefinition::getFixedLeg(double,class GeneratorSwapFixedIbor,double)" (?getFixedLeg@SwapFixedIborDefinition@@QAE?AVAnnuityCouponFixedDefinition@@NVGeneratorSwapFixedIbor@@N@Z)   ProjectGenchoCurveConstruction  C:\Users\yanto\source\repos\ProjectGenchoCurveConstruction\ProjectGenchoCurveConstruction\SwapFixedIborDefinition.obj   1   
and
    Error   LNK1120 1 unresolved externals  ProjectGenchoCurveConstruction  C:\QuantLib-1.11\Debug\ProjectGenchoCurveConstruction.exe   1   
while for Release mode I get:
    Error   LNK1104 cannot open file 'deffile'  ProjectGenchoCurveConstruction  C:\Users\yanto\source\repos\ProjectGenchoCurveConstruction\ProjectGenchoCurveConstruction\LINK  1   
all my code is 3 classes and main file, i.e. 7 files:
main.cpp
#include <iostream>
#include <memory>
#include "GeneratorSwapFixedIbor.h"
#include "SwapFixedIborDefinition.h"
// #include "AnnuityCouponFixedDefinition.h"
int main()
{
    GeneratorSwapFixedIbor generator;
    double etc = 0;
    double mktQuote = 0;
    //SwapFixedIborDefinition mySwap(mktQuote, generator, etc);
    std::cout << " finish";
    return 0; 
}
GeneratorSwapFixedIbor.h
#pragma once
class GeneratorSwapFixedIbor
{
    double somePrimitive;
    double startDate;
    double endDate;
    double notional;
    double rate;
    int zero;
public:
    GeneratorSwapFixedIbor();
    ~GeneratorSwapFixedIbor();
    double getSomePrimitive();
};
GeneratorSwapFixedIbor.cpp
#include "GeneratorSwapFixedIbor.h"
#include <iostream>
GeneratorSwapFixedIbor::GeneratorSwapFixedIbor()
    //: somePrimitive{ somePrimitive }
{
    somePrimitive = 101;
    std::cout << "Object GeneratorSwapFixedIbor is being created" << somePrimitive;
}
GeneratorSwapFixedIbor::~GeneratorSwapFixedIbor(){}
double GeneratorSwapFixedIbor::getSomePrimitive()
{
    return somePrimitive;
}
AnnuityCouponFixedDefinition.h
#pragma once
#include "GeneratorSwapFixedIbor.h"
#include "AnnuityCouponFixedDefinition.h"
class AnnuityCouponFixedDefinition
{
//private:
    GeneratorSwapFixedIbor generator;
    double mktQuote;
    double etc;
public:
    AnnuityCouponFixedDefinition();
    AnnuityCouponFixedDefinition(double mktQuote, GeneratorSwapFixedIbor generator, double etc);
    ~AnnuityCouponFixedDefinition();
};
AnnuityCouponFixedDefinition.cpp
#include <iostream>
#include "SwapFixedIborDefinition.h"
#include "GeneratorSwapFixedIbor.h"
#include "AnnuityCouponFixedDefinition.h"
AnnuityCouponFixedDefinition::AnnuityCouponFixedDefinition()
{
    std::cout << "Object AnnuityCouponFixedDefinition is being created";
}
AnnuityCouponFixedDefinition::AnnuityCouponFixedDefinition(double mktQuote, GeneratorSwapFixedIbor generator, double etc)
{
    std::cout << "Object AnnuityCouponFixedDefinition is being created";
}
AnnuityCouponFixedDefinition::~AnnuityCouponFixedDefinition(){}
SwapFixedIborDefinition.h
#pragma once
#include "GeneratorSwapFixedIbor.h"
#include "AnnuityCouponFixedDefinition.h"
class SwapFixedIborDefinition
{
//private:
    GeneratorSwapFixedIbor generator;
    double mktQuote;
    double etc;
public:
    SwapFixedIborDefinition();
    SwapFixedIborDefinition(double mktQuote, GeneratorSwapFixedIbor generator, double etc);
    AnnuityCouponFixedDefinition getFixedLeg(double mktQuote, GeneratorSwapFixedIbor generator, double etc);
    ~SwapFixedIborDefinition();
    double get_smth();
};
SwapFixedIborDefinition.cpp
#include <iostream>
#include "SwapFixedIborDefinition.h"
#include "GeneratorSwapFixedIbor.h"
#include "AnnuityCouponFixedDefinition.h"
SwapFixedIborDefinition::SwapFixedIborDefinition() {}
SwapFixedIborDefinition::SwapFixedIborDefinition(double mktQuote, GeneratorSwapFixedIbor generator, double etc)
    : mktQuote{ mktQuote }, generator{ generator }, etc{ etc }
{
    std::cout << "Object SwapFixedIbor is being created";
}
AnnuityCouponFixedDefinition SwapFixedIborDefinition::getFixedLeg(double mktQuote, GeneratorSwapFixedIbor generator, double etc)
{
    return AnnuityCouponFixedDefinition(mktQuote, generator, etc);
}
double SwapFixedIborDefinition::get_smth() {
    std::cout << " we can call smth ";
    return 100;
}
SwapFixedIborDefinition::~SwapFixedIborDefinition(){}
This is how my solution explorer looks like.
 
 
 
    