我对如何在C++ 11中定义一个具有参数指向函数的指针的构造有一些疑问。我创建了类Payoff来管理不同类型的给予罢工和现货价格的期权。我还为几种类型的罢工定义了三个函数,具有相同的结构(参数和返回类型)和一个指向函数的指针,目的是管理这些相似的函数。这里头:构造函数C++和函数参数指针
#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 &'
我恳请问,如果有人能解释我是什么样的无法工作
这不是相关的错误信息。尝试发布所有这些。 – aschepler
如果您显示与您未显示的代码相对应的相关错误消息,这将有所帮助。构造函数接受和存储的指针是非成员函数。提供的功能是成员函数。它们是不同的东西,因此编译器试图将“指向成员函数的指针”转换为“指向非成员函数的指针”时出错。 – Peter
你在哪里使用C++ 11?你需要使函数调用/放置/数字静态,所以你将能够把它们作为构造函数的参数 – Sklert