我对如何在c ++ 11中定义构造有一些疑问,该构造具有作为参数的函数指针。我创建了类Payoff,它管理不同类型的选项的支付给定一个罢工和一个点价钱。我还为几种类型的罢工定义了三个函数,具有相同的结构(参数和返回类型)以及指向函数的指针,以便管理这些类似的函数。标题为:
#ifndef PAYOFFb_H
#define PAYOFFb_H
#include <MinMax.h>
class PayOff
{
public:
typedef double (*pf)(const double& Strike, const double& Spot);
double Call(const double& Strike, const double& Spot){ return max(Spot - Strike, 0.0); };
double Put(const double& Strike, const double& Spot){ return max(Strike - Spot, 0.0); };
double Digital(const double& Strike, const double& Spot){ return Spot > Strike ? 1 : 0; };
PayOff(double Strike_, pf TheOptionsType_) : Strike(Strike_), TheOptionsType(TheOptionsType_){};
double operator()(double Spot) const;
private:
double Strike;
pf TheOptionsType;
};
#endif
和身体:
#include "Payoff1b.h"
#include <MinMax.h>
double PayOff::operator()(double spot) const
{
return (*TheOptionsType)(Strike, spot);
};
使用以下主要代码:
int main()
{
double Strike;
cout << "\nEnter strike\n";
cin >> Strike;
PayOff callPayOff(Strike, PayOff::Call);
PayOff putPayOff(Strike, PayOff::Put);
PayOff digitalPayOff(Strike, PayOff::Digital);
return 0;
}
我为构造函数收到此错误:
[...] error C2664: 'PayOff::PayOff(const PayOff &)' : cannot convert argument 1 from 'double' to 'const PayOff &'
我很想问是否有人可以解释我什么不起作用
答案 0 :(得分:0)
目前尚不清楚是否正在尝试使用成员函数指针或常规函数指针。
看起来像第二种情况,因为您需要Call
,Put
,Digital
是静态的:
class PayOff
{
public:
typedef double(*pf)(const double& Strike, const double& Spot);
static double Call(const double& Strike, const double& Spot)
{
return max(Spot - Strike, 0.0);
};
static double Put(const double& Strike, const double& Spot)
{
return max(Strike - Spot, 0.0);
};
static double Digital(const double& Strike, const double& Spot)
{
return Spot > Strike ? 1 : 0;
};
PayOff(double Strike_, pf TheOptionsType_) : Strike(Strike_), TheOptionsType(TheOptionsType_) {};
double operator()(double Spot) const;
private:
double Strike;
pf TheOptionsType;
};