我對如何在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