没有合适的默认构造函数可用-默认构造函数调用的位置

No appropriate default constructor available - Where the default constructor called?

本文关键字:默认 位置 函数调用 构造函数      更新时间:2023-10-16

编译下面的代码,我在第105行error C2512: 'PayOffBridge': no appropriate default constructor available 中得到了这个

我的问题是:默认构造函数在哪里调用?我该怎么修?

注意:这里提供的大部分代码来自Mark Joshi-设计模式和衍生品定价

#include <iostream>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/normal_distribution.hpp>
#include <boost/random/variate_generator.hpp>
#include <cmath>
#include <boost/shared_ptr.hpp>
#include <stdio.h>
#include <vector>
// *********************  PayOff3
class PayOff{
    public:
        PayOff(){};
        virtual double operator()(double Spot) const = 0 ;
        virtual PayOff* clone() const = 0;
        virtual ~PayOff(){}
    private:
};

class PayOffCall : public PayOff{
    public:
        PayOffCall(double Strike_);
        virtual double operator()(double Spot) const ;
        virtual ~PayOffCall(){}
        virtual PayOff* clone () const ;
    private:
        double Strike;
};
PayOffCall::PayOffCall(double Strike_) : Strike(Strike_) {
}
double PayOffCall::operator()(double Spot) const {
    return std::max(Spot - Strike, 0.0 );
}
PayOff* PayOffCall::clone () const {
    return new PayOffCall(*this);
}
// ********************* PayOff Bridge
class PayOffBridge {
    public :
        PayOffBridge(const PayOffBridge& original);
        PayOffBridge(const PayOff& innerPayOff);
        PayOffBridge& operator = (const PayOffBridge& original);
        ~PayOffBridge();
        inline double operator()(double Spot) const;
    private:
        PayOff* ThePayOffPtr;
};
inline double PayOffBridge::operator() (double Spot) const {
    return ThePayOffPtr->operator()(Spot);
}
PayOffBridge::PayOffBridge(const PayOffBridge& original){
    ThePayOffPtr = original.ThePayOffPtr->clone();
}
PayOffBridge::PayOffBridge(const PayOff& innerPayOff){
    ThePayOffPtr = innerPayOff.clone();
}
PayOffBridge& PayOffBridge::operator = (const PayOffBridge& original){
    if (this != &original){
        delete ThePayOffPtr;
        ThePayOffPtr = original.ThePayOffPtr->clone();
    }
    return *this;
}
PayOffBridge::~PayOffBridge(){
    delete ThePayOffPtr;
}
// *********************  Vanilla2
class VanillaOption {
    public:
        VanillaOption(const PayOffBridge& thePayOff, double expiry);
        VanillaOption(const VanillaOption& original);
        VanillaOption& operator() (const VanillaOption& original);
        ~VanillaOption();
        double GetExpiry() const ;
        double OptionPayOff(double Spot) const ;
    private:
        double Expiry;
        PayOffBridge ThePayOffBridge;
};
VanillaOption::VanillaOption(const PayOffBridge& thePayOff, double expiry) : Expiry(expiry), ThePayOffBridge(thePayOff){
}
VanillaOption::VanillaOption(const VanillaOption& original){
    Expiry=original.GetExpiry();
    ThePayOffBridge = original.ThePayOffBridge;
}

double VanillaOption::GetExpiry() const {
    return Expiry;
}
double VanillaOption::OptionPayOff(double Spot) const {
    return ThePayOffBridge(Spot);
}
VanillaOption& VanillaOption::operator() (const VanillaOption& original){
    if (this != &original){
        Expiry=original.GetExpiry();
        ThePayOffBridge = original.ThePayOffBridge;
    }
    return *this;
}
VanillaOption::~VanillaOption(){
}

int main (){
}

VanillaOption(const VanillaOption& original)没有初始值设定项列表,这意味着成员必须是默认构造的。使其

VanillaOption::VanillaOption(const VanillaOption& original)
  : Expiry(original.GetExpiry()),
    ThePayOffBridge(original.ThePayOffBridge)
{}