編譯下面的代碼我在105行得到這個error C2512: 'PayOffBridge': no appropriate default constructor available
沒有適當的默認構造函數可用 - 默認構造函數調用的地方在哪裏?
我的問題是:默認的構造函數被調用?我該如何解決它?
注:這裏大部分提供的代碼是由馬克·喬希 - 設計模式及衍生證券定價
#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'的拷貝構造函數,你不使用構造函數的初始化列表,因此具有默認構造VanillaOption'的'所有成員。在這種情況下,就像參數化構造函數 – KABoissonneault