関数へのポインタをパラメータとして持つコンストラクタをC++ 11で定義する方法については疑問があります。さまざまなタイプのペイオフを管理するPayoffクラスを作成しました。ストライキと現物価格を与えられたオプション。また、同じ構造(パラメータと戻り値の型)と関数へのポインタを使用して、これらの類似の関数を管理する目的で、いくつかのタイプのストライクに対して3つの関数を定義しました。ここでヘッダー:コンストラクタ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);
};
次メインのコード使用:
[...] error C2664: 'PayOff::PayOff(const PayOff &)' : cannot convert argument 1 from 'double' to 'const PayOff &'
:私は、コンストラクタのために、このエラーが出る
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;
}
を私は親切に誰かが私に何を説明できるか尋ねる動作しない
関連するエラーメッセージはないこと:
それはそのためにあなたはあなたの
Call
、Put
、Digital
は静的である必要があり、第二の場合のように見えます。それらのすべてを投稿してみてください。 – ascheplerこれは、表示されていないコードに対応するエラーメッセージではなく、関連するエラーメッセージを表示した場合に役立ちます。コンストラクタが受け入れて格納するポインタは非メンバ関数です。提供される関数はメンバ関数です。それらは異なるものなので、コンパイラーが「メンバー関数へのポインター」を「非メンバー関数へのポインター」に変換しようとするとエラーが発生します。 – Peter
ここではC++ 11はどこですか?コール/プット/デジタル静的関数を作成する必要がありますので、コンストラクタの引数としてそれらを入れることができます – Sklert