함수에 대한 포인터를 매개 변수로 갖는 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);
};
다음과 같은 주요 코드 사용 :
[...] 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
정적 일 필요, 2의 경우처럼 보인다. 모두 게시 해보십시오. – aschepler표시하지 않은 코드에 해당하는 오류 메시지가 아닌 관련 오류 메시지를 표시하면 도움이됩니다. 생성자가 수락하고 저장하는 포인터는 비 멤버 함수입니다. 제공되는 함수는 멤버 함수입니다. 그것들은 다른 것들입니다. 따라서 컴파일러가 "멤버 함수 포인터"를 "비 멤버 함수 포인터"로 변환하려고 할 때의 에러입니다. – Peter
여기서 C++ 11은 어디에서 사용합니까? Call/Put/Digital 정적 함수를 만들어야 생성자의 인수로 넣을 수 있습니다. – Sklert