没有合适的默认构造函数可用-默认构造函数调用的位置
No appropriate default constructor available - Where the default constructor called?
编译下面的代码,我在第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)
{}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 将值指定给向量(2D)的向量中的某个位置
- 处于默认参数位置的 Lambda 无法访问好友成员。这是编译器错误吗?
- C++不同内存位置中的默认数组值
- 如何更改*.db的默认位置?
- Switch语句中应该是默认位置的位置
- 如何在默认和二维数组中找到顺序扩大元素的位置
- GDAL 库仅在默认位置查找 UnixImageIO 框架
- 在皮条类中初始化默认值的最佳位置
- 如何更改新MFC对话框的默认语言(位置)
- 如何更改MFC中弹出窗口的默认位置
- 为ofstream创建的文件设置默认位置
- 为什么我总是在传递位置参数时得到默认值
- c++变长函数中默认值参数的位置
- Visual Studios (2012 pro 主要是) <从父级继承或项目默认值的默认值的文件位置>
- 没有合适的默认构造函数可用-默认构造函数调用的位置
- /usr/lib 似乎不是默认链接位置
- 外部文件默认位置