gpt4 book ai didi

c++ - 没有合适的默认构造函数可用 - 默认构造函数在哪里调用?

转载 作者:行者123 更新时间:2023-11-27 22:49:49 26 4
gpt4 key购买 nike

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

我的问题是:默认构造函数在哪里被调用?我该如何解决?

注意:此处提供的大部分代码来自 Mark Joshi - Design Patterns and Derivatives Pricing

#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)
{}

关于c++ - 没有合适的默认构造函数可用 - 默认构造函数在哪里调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38439472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com